Javascript ReactJS组件将接收未触发的Props

Javascript ReactJS组件将接收未触发的Props,javascript,reactjs,slick.js,Javascript,Reactjs,Slick.js,我正在实现一个滑块 我有自定义的子组件,需要在父组件更新时更新其状态。当我正常加载幻灯片时,例如: <Slider ref={c => this.slider = c } {...settings}> <div key={1}> <Slide1 key={1} formData={this.state.formData} /> </div> ... </Slider> this.slider=c}{…设置}>

我正在实现一个滑块

我有自定义的子组件,需要在父组件更新时更新其状态。当我正常加载幻灯片时,例如:

<Slider ref={c => this.slider = c } {...settings}>
  <div key={1}>
    <Slide1 key={1} formData={this.state.formData} />
  </div>
  ...
</Slider>
this.slider=c}{…设置}>
...
组件将接收道具工作正常。但是,当我根据示例动态加载幻灯片时,这些生命周期事件永远不会被调用,即使在父级中的状态更新之后也是如此

componentDidMount() {
    this.setState({
        slides: [
            <div key={1}>
                <Slide1 key={1} formData={this.state.formData} />
            </div>,
            ....
        ]
    )};
}


<Slider ref={c => this.slider = c } {...settings}>
  {this.state.slides.map(function (slide, i) {
    return slide
  })}
</Slide>
componentDidMount(){
这是我的国家({
幻灯片:[
,
....
]
)};
}
this.slider=c}{…settings}>
{this.state.slides.map(函数(slide,i){
回程滑道
})}
通过这样加载组件,即使在状态更新之后,也不会调用ComponentReceiveProps


我错过了什么?我不需要Redux来管理它,是吗?

首先,尝试在状态中存储实际的React元素是一个非常糟糕的主意,在状态中,您应该只存储纯数据,然后在
render
方法中使用这些纯数据来组成标记


其次,
componentWillReceiveProps
在您的案例中不被调用,因为您的幻灯片是第一次在那里呈现的,它们正在装载到DOM上,但是
componentWillReceiveProps
只能为已经装载的组件调用,请参见。

首先,尝试在状态中存储实际的React元素是一个非常糟糕的主意,在那里您应该只存储纯数据,然后在
render
方法中使用纯数据来组成标记


其次,
componentWillReceiveProps
在您的案例中不被调用,因为您的幻灯片是第一次在那里呈现的,它们正在装载到DOM上,但是
componentWillReceiveProps
只能为已经装载的组件调用,请参阅。

谢谢Dan。仍然是新的反应,但将jsx存储在状态中感觉是错误的。如果我有多个自定义组件需要在幻灯片中渲染,还有其他方法吗?幻灯片1,幻灯片2,等等?这取决于那些幻灯片1,幻灯片2。。。它们彼此相似。基于名称和您在Slider中使用它们的事实,我打赌它们是。忘掉幻灯片1、2、3,只创建一个足够通用的幻灯片。它们实际上都是完全不同的形式。不幸的是,这真的没有共同之处。这很难相信,因为命名。无论如何,如果它们差异如此之大,那么它们的呈现就不应该像将它们从某个数组映射到完全不同的元素那样动态,或者创建通用的呈现机制(理想情况下是组件)。如果不想,请通过CodePen或其他方式提供代码,除一般性的短语外,我不能告诉你更多。你的第一句话实际上非常有用。我在文档中读了100遍,但由于某种原因,在我读到这里之前,它从未点击过。我想通过在数组中传递幻灯片名称列表而不是jsx元素,我已经解决了这个问题。然后在.map中,我只是检查它是哪张幻灯片并将其渲染到屏幕上。我不认为这是最优雅的解决方案,但它是一个非常独特的用例,而且时间很短。非常感谢你的帮助。非常感谢。谢谢你,丹。仍然是新的反应,但将jsx存储在状态中感觉是错误的。如果我有多个自定义组件需要在幻灯片中渲染,还有其他方法吗?幻灯片1,幻灯片2,等等?这取决于那些幻灯片1,幻灯片2。。。它们彼此相似。基于名称和您在Slider中使用它们的事实,我打赌它们是。忘掉幻灯片1、2、3,只创建一个足够通用的幻灯片。它们实际上都是完全不同的形式。不幸的是,这真的没有共同之处。这很难相信,因为命名。无论如何,如果它们差异如此之大,那么它们的呈现就不应该像将它们从某个数组映射到完全不同的元素那样动态,或者创建通用的呈现机制(理想情况下是组件)。如果不想,请通过CodePen或其他方式提供代码,除一般性的短语外,我不能告诉你更多。你的第一句话实际上非常有用。我在文档中读了100遍,但由于某种原因,在我读到这里之前,它从未点击过。我想通过在数组中传递幻灯片名称列表而不是jsx元素,我已经解决了这个问题。然后在.map中,我只是检查它是哪张幻灯片并将其渲染到屏幕上。我不认为这是最优雅的解决方案,但它是一个非常独特的用例,而且时间很短。非常感谢你的帮助。非常感谢。