Reactjs 反应:在父级重新渲染时,不会将道具传递给子组件

Reactjs 反应:在父级重新渲染时,不会将道具传递给子组件,reactjs,Reactjs,我的父组件中有以下代码: render () { return ( <div> <LaunchSidebar game={this.state.game} /> {!this.state.isLaunchingGame && <Loader/>} <div ref="game-container" id="game-container">

我的父组件中有以下代码:

render () {
    return (
        <div>
            <LaunchSidebar game={this.state.game} />
            {!this.state.isLaunchingGame && <Loader/>}
            <div ref="game-container" id="game-container"></div>
        </div>
    )
}
我设置了断点,每次调用父级中的
render
,然后调用
componentWillReceiveProps
。但是,虽然
this.state.game
具有属性,但
nextrops.game
是一个空对象

怎么可能呢


我使用React 16.2

如果您真的想在LaunchSidebar组件中将游戏用作状态,我建议您将componentWillReceiveProps方法与componentDidUpdate交换

例如:

componentDidMount(prevProps, prevState) {
    if (prevState.game !== this.props.game) {
        this.updateGame(this.props.game);
    }
}

updateGame = (game) => {
    this.setState({ game });
}
请注意,为了更新componentDidMount生命周期方法中的状态,您应该将其包装在条件中,否则它将陷入循环中


我会考虑保持简单,并在父组件中更新游戏,并将其用作子组件中的一个道具,因为父组件中更新的状态将导致重新渲染,并且子组件中的游戏道具也将被更新。

如果您真的想将游戏作为ActudiSeDar组件中的状态使用,我建议您将componentWillReceiveProps方法与componentDidUpdate交换

例如:

componentDidMount(prevProps, prevState) {
    if (prevState.game !== this.props.game) {
        this.updateGame(this.props.game);
    }
}

updateGame = (game) => {
    this.setState({ game });
}
请注意,为了更新componentDidMount生命周期方法中的状态,您应该将其包装在条件中,否则它将陷入循环中

我会考虑保持简单,并在父组件中更新游戏并将其用作子组件中的一个道具,因为父组件中更新的状态将导致重新渲染,并且子组件中的游戏支撑也将被更新。