浅析两种React组件
React两种组件
1.函数组件
|
|
2.类组件(注意this)
|
|
3.关于这里的Welcome组件
<Welcome />
会被翻译成React.createElement(Welcome)*- 可以点击[babel online]([https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&build=&builtIns=false&spec=false&loose=false&code_lz=Q&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Creact%2Cstage-2%2Cenv&prettier=false&targets=&version=7.9.6&externalPlugins=](https://babeljs.io/repl#?browsers=defaults%2C not ie 11%2C not ie_mob 11&build=&builtIns=false&spec=false&loose=false&code_lz=Q&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Creact%2Cstage-2%2Cenv&prettier=false&targets=&version=7.9.6&externalPlugins=))直接翻译测试
4.React.CreateElement
- 传入字符串’div’,会创建一个div
- 传入一个函数,会调用函数,获取其返回值
- 传入一个类,则在类前面加个
new
(这回导致执行constructor
),获取一个组件对象,然后调用对象的render方法,获取其返回值
类组件
1.类组件写法示例
|
|
2.添加props
- 类组件直接读取属性this.props.xxx
- 函数组件直接读取参数props.xxx
3.添加state(内部数据)
- 类组件用this.state读,this.setState
- 函数组件用useState返回数组,第一项读,第二项写
|
|
4.类组件注意事项
-
this.state.n+=1无效
- 其实n已经改变了,只不过UI不会自动更新
- 调用setState才会触发UI更新
- 因为React没有像Vue监听data一样监听state
-
setState会异步更新UI
- setState之后,state不会马上改变,立马读state会失败
- 更推荐的方式是setState函数(避免异步造成的误解)
1 2 3 4 5 6 7
this.setState(state=>{ this.setState(state=>{ const n = state.n+1 console.log(n) return {n} }) })
-
this.setState(this.state)不推荐
- 因为React希望我们不要修改旧的state(不可变数据)
- 常用代码:this.setState({n:state.n+1})
函数组件
1.函数组件注意事项
- 跟类组件相似的地方
- 也要通过setX(新值)来更新UI
- 跟类组件不同的地方
- 没有this,一律用参数和变量
2.类组件的setState会自动合并(只合并对象的第一层),函数组件的setX不会自动合并(所以分开写)
- 类组件要合并第二层的写法(先复制),默认值合并第一层
|
|