class组件其他api
错误处理
Error boundaries 仅捕获组件树中以下组件中的错误。但它本身的错误无法捕获。当渲染过程,生命周期,或子组件的构造函数中抛出错误时,会调用如下方法:
- static getDerivedStateFromError()
- componentDidCatch()
1.static getDerivedStateFromError()
此生命周期会在后代组件抛出错误后被调用。 它将抛出的错误作为参数,并返回一个值以更新 state
2.componentDidCatch(error, info)
此生命周期在后代组件抛出错误后被调用。 它接收两个参数:
error —— 抛出的错误。
info —— 带有 componentStack key 的对象,其中包含有关组件引发错误的栈信息。
其他APIs :
不同于上述生命周期方法(React 主动调用),以下方法是你可以在组件中调用的方法。
只有两个方法:setState() 和 forceUpdate()。
- setState()
- forceUpdate()
1.setState(updater, [callback])
//参数一对象类型的:
this.setState({quantity: 2})
//参数一为带有形式参数的 updater 函数:
//后续状态取决于当前状态,我们建议使用 updater 函数的形式代替
this.setState((state) => {
return {quantity: state.quantity + 1};
});
setState() 将对组件 state 的更改排入队列,并通知 React 需要使用更新后的 state 重新渲染此组件及其子组件。
将 setState() 视为请求而不是立即更新组件的命令。为了更好的感知性能,React 会延迟调用它,然后通过一次传递更新多个组件。React 并不会保证 state 的变更会立即生效。
setState() 并不总是立即更新组件。它会批量推迟更新。这使得在调用 setState() 后立即读取 this.state 成为了隐患。为了消除隐患,请使用 componentDidUpdate 或者 setState 的回调函数(setState(updater, callback)),这两种方式都可以保证在应用更新后触发。
除非 shouldComponentUpdate() 返回 false,否则 setState() 将始终执行重新渲染操作。
2.forceUpdate(callback)
默认情况下,当组件的 state 或 props 发生变化时,组件将重新渲染。如果 render() 方法依赖于其他数据,则可以调用 forceUpdate() 强制让组件重新渲染。
调用 forceUpdate() 将致使组件调用 render() 方法,此操作会跳过该组件的 shouldComponentUpdate()。但其子组件会触发正常的生命周期方法,包括 shouldComponentUpdate() 方法。如果标记发生变化,React 仍将只更新 DOM。
class 属性
- defaultProps
- displayName
实例属性
- props
- state
1.props
this.props 包括被该组件调用者定义的 props。
需特别注意,this.props.children 是一个特殊的 prop,
通常由 JSX 表达式中的子组件组成,而非组件本身定义。
2.state
组件中的 state 包含了随时可能发生变化的数据。state 由用户自定义,它是一个普通 JavaScript 对象。
如果某些值未用于渲染或数据流(例如,计时器 ID),则不必将其设置为 state。此类值可以在组件实例this上定义。