javascript - React 儿童道具总是相等的
问题描述
我试图根据React16 Doc实现一个 ErrorBoundary HoC 组件以进行错误处理。我将 ErrorBoundary 组件设置为 PureComponent,我注意到子组件总是相等的,它试图防止子组件的重新渲染。
class ErrorBoundary extends React.PureComponent {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(error, info) {
this.setState({ hasError: true });
}
render() {
if (this.state.hasError) {
return <PageNotFound />;
}
return this.props.children;
} }
将组件修改为 React.Component 并添加一个 componentDidUpdate 后,我能够看到 children 的 props 总是相等的。
componentWillUpdate(nextProps, nextState, nextContext) {
if(this.props.children === nextProps.children){ //returns TRUE
console.log('children value are equal')
}
}
下面的代码显示了我如何使用 ErrorBoundary 组件
<BrowserRouter>
<ErrorBoundary>
<Route path='/' component={Router} />
</ErrorBoundary>
</BrowserRouter>
谁能解释一下儿童道具是如何平等的?
解决方案
children
总是引用作为子组件传递的值,即<Route>
React 元素:
<ErrorBoundary>
<Route path='/' component={Router} />
</ErrorBoundary>
由于父组件没有重新渲染,<Route>
所以对象是相同的。
推荐阅读
- javascript - HighCharts - 选择点时禁用鼠标悬停
- wordpress - 在树枝模板中添加 wordpress 菜单位置
- javascript - 如何从 JSON API 调用迭代子对象
- java - 通过 akka-http 发送 InputStream
- python - 对 Py_Initialize() 的未定义引用
- r - 如何替换 R 中栅格的 XY 坐标?
- pandas - 当小时和分钟为零时,DataFrame 不显示时间?
- python - 在 Python 3 中向继承的类添加方法
- pandas - 为什么 pandas.df.__getitem__ 行为“很难预测”?
- html - 为什么CSS的一部分在发布时没有生效?