反应儿童道具总是平等的

时间:2019-02-18 12:38:37

标签: javascript reactjs react-router

我正在尝试根据React16 Doc实现一个ErrorBoundary HoC组件来进行错误处理。我将ErrorBoundary组件设置为PureComponent,并且注意到 children 道具始终相等,并且它试图防止子组件的重新呈现。

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之后,我能够看到子道具始终相等。

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>

谁能解释孩子的道具如何平等?

1 个答案:

答案 0 :(得分:0)

children始终引用作为子元素传递的值,即<Route> React元素:

<ErrorBoundary>
    <Route path='/' component={Router} />
</ErrorBoundary>

由于父组件未重新呈现,因此<Route>对象是相同的。