render()
render: class中唯一必须实现的方法
当?render ?被调用时,它会检查?this.props ?和?this.state ?的变化并返回以下类型之一:
- React 元素。通常通过 JSX 创建。例如,
<div /> ?会被 React 渲染为 DOM 节点,<MyComponent /> ?会被 React 渲染为自定义组件,无论是?<div /> ?还是?<MyComponent /> ?均为 React 元素。 - 数组或 fragments。 使得 render 方法可以返回多个元素。
- Portals。可以渲染子节点到不同的 DOM 子树中。
- 字符串或数值类型。它们在 DOM 中会被渲染为文本节点
- 布尔类型或?
null 。什么都不渲染。(主要用于支持返回?test && <Child /> ?的模式,其中 test 为布尔类型。)
render() ?函数应该为纯函数,这意味着在不修改组件 state 的情况下,每次调用时都返回相同的结果,并且它不会直接与浏览器交互。
如需与浏览器进行交互,请在?componentDidMount() ?或其他生命周期方法中执行你的操作。保持?render() ?为纯函数,可以使组件更容易思考。
constructor()
constructor: 如果不初始化state或者不进行方法绑定,则可以不需要使用该方法
初始化示例
constructor(props) {
super(props);
this.state = {
};
}
这里要非常注意一点不要将props的值赋给state,因为这样修改props的值时state并不会跟着一起改变,完全可以直接使用props.name,而不是像下方这样赋值
错误示例
constructor(props) {
super(props);
this.state = {
name: props.name
};
}
如果项目中state依赖props,请点击下方链接查看解决方案
你可能不需要使用派生 state – React Bloghttps://zh-hans.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
componentDidMount: 会在组件挂在后立即调用,这个生命周期适合发起请求和初始化
componentDidMount()
componentDidUpdate: 会在更新后立即调用,首次渲染时不会触发
componentDidUpdate()
componentWillUnmout(): 会在组件卸载及销毁前直接调用。请在此方法中执行必要的清除操作
componentWillUnmout()
|