子状态更改时子不重新渲染

Posted

技术标签:

【中文标题】子状态更改时子不重新渲染【英文标题】:Child not re rendering when child state changed 【发布时间】:2021-01-06 12:30:35 【问题描述】:

我在子组件中使用模型,我想通过子状态变量来管理可见性,但是当我点击按钮时(它也在子上),子状态变量更新成功但子渲染函数没有被调用? 请检查我的代码,让我纠正我的错误。

      //Main Parent class
        
        export default class ChatMessageComponent extends Component 
            renderItem = ( index, item ) => 
                return (
                  <ChatMessageView
                    ...this.props      
                  />
                )
              ;
            
    
    //ChatMessageView child 
    export default class ChatMessageView extends PureComponent 
    render() 
        return (
          <View style=[styles.container, isMinimize ?  width: screenWidth - scale(20)  : null]>
                <ChatNoticeView
                  ...this.props
    
                />
          </View>
        )
      
    
    
    //ChatNoticeView child
    export default class ChatNoticeView extends Component 
constructor(props) 
    super(props);
    this.state = 
      visibleModal: this.props.isVisible
    
  
 renderModAL = () => 
    return (
      <Modal
        visible=this.state.visibleModal
      >
        <RejectReason
        />
      </Modal>
    )
  
render() 
    return (
      <View style=styles.container>
    this.renderModAL()
      </View>
    )
  


//Model
export default class RejectReason extends Component 
    componentDidMount() 
    

    render() 
        return (
            <View style=styles.container>

            </View>
        )
    

【问题讨论】:

请发布您的代码。 提升状态reactjs.org/docs/lifting-state-up.html @SaachiTech,我添加了我的代码,请检查。 【参考方案1】:

这是因为您孩子的功能与单击按钮时不会更新的状态绑定在一起。要么需要使用getderivedstatefromprops 方法来更新状态,要么将可见性与道具绑定。我已经更新了你应该显示模态的子组件。

export default class ChatNoticeView extends Component 
constructor(props) 
    super(props);
    this.state = 
      visibleModal: this.props.isVisible
    
  
 renderModAL = () => 
    return (
      <Modal
        visible=this.props.isVisible
      >
        <RejectReason
        />
      </Modal>
    )
  

您可以阅读更多关于 getDerivedStateFromProps here

【讨论】:

以上是关于子状态更改时子不重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

React 子组件不会在其状态更改时重新渲染

setState 更改状态但不重新渲染

解决vue开发时子组件数据和组件渲染的异步问题

如何在状态更改(父)reactjs时重新渲染子组件

React 功能组件在重新挂载后停止渲染状态更改

React.memo()、useCallback()、useMemo() 区别及基本使用