基础学习:
前端最基础的就是 HTML , CSS 和 JavaScript 。
网页设计:HTML和CSS基础知识的学习
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
为了解决这个问题,一般的做法是使用 shallowCopy
(浅拷贝)或 deepCopy
(深拷贝)来避免被修改,但这样做造成了 CPU 和内存的浪费。
接下来分析shallowEqual()
函数
function shallowEqual(objA: mixed, objB: mixed): boolean {
// 首先对两个基本数据类型进行比较
if (is(objA, objB)) {
return true;
}
// 判断两个数据都为object的情况
if (typeof objA !== 'object' || objA === null ||
typeof objB !== 'object' || objB === null) {
return false;
}
// 获得所有的key
const keysA = Object.keys(objA);
const keysB = Object.keys(objB);
// 判断两者key的数量是否一致
if (keysA.length !== keysB.length) {
return false;
}
// 如果key数量相同,使用一层for循环去比较
for (let i = 0; i < keysA.length; i++) {
if (
// 判断对象B中是否包含对象A的key,即两者的keys是否一致
!hasOwnProperty.call(objB, keysA[i]) ||
// 通过is()函数对比A和B的key对应的数据
!is(objA[keysA[i]], objB[keysA[i]])
) {
return false;
}
}
下面以组件的使用来举例:
例如:
class ChildComponent extends React.PureComponent {
render() {
return(
<div>
{this.props.numbers}
</div>
)
}
}
class MainComponent extends React.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.state = {
numbers: [0]
}
}
handleClick() {
const arr = this.state.numbers;
arr.push(1);
this.setState({
numbers: arr
})
console.log(this.state.numbers)
}
render() {
<div>
<button onClick={this.handleClick} />
<ChildComponent numbers={this.state.numbers}/>
</div>
}
}
在MainComponent中去修改numbers时,ChildComponent并没有得到刷新。原因在于js使用的是引用赋值,新的对象简单引用了原始对象,改变新对象虽然影响了原始对象,但对象的地址还是一样,使用===
比较的方式相等。而在PureComponent
中,会被判定prop
相等而不触发render()
。
避免此类问题最简单的方式是,避免使用值可能会突变的属性或状态,而是使用副本来返回新的变量。
handleClick() {
this.setState(prevState => ({
numbers: [...prevState.numbers, 1],
}));
};
三、拓展阅读
基础学习:
前端最基础的就是 HTML , CSS 和 JavaScript 。
网页设计:HTML和CSS基础知识的学习
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
pt基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
[外链图片转存中…(img-3Pp9HQVr-1715793497844)]