当前位置: 首页 > 知识库问答 >
问题:

未重新呈现子组件

都阳辉
2023-03-14

我是新来的反应。作为一个学习练习,我正在构建一个国际象棋应用程序

我想根据父级中的状态更改子级的DOM。当前,在父级组件的状态变化时,子级组件没有变化。

class Game extends Component{
    constructor(){
        super();
        this.state = {
            game :{ 
                board_position = { 'One' : ''}
            }
        }

        this.handleClick = this.handleClick.bind(this);
    }

    handleClick(){
        let p = this.state.game.board_position;

        // some computations on p
        p = { board_position : { 'One' : Math.random() } }

        this.setState({
            game : p
        })

        //this.forceUpdate(); // Just trying different methods to make it work
    }

    render(){
        return(
            <div onClick={(e) => this.handleClick(e) }>
                <Piece {...this.state.game.board_position} />
            </div>
        )
    }
}
Class Piece extends Component{

    constructor(){
        super(props);
        this.state = {
            clr : ''
        }
    }

    componentWillMount(){
        let c;

        // some computations that change value of c based on props
        if( typeof ( this.props.game.one) == number ){
            c = 'Red'
        } else {
            c = 'Blue'
        }


        this.setState({
            clr : c
        })

    }

    render(){
        return(
            <span>{this.state.clr}</span>
        )
    }
}

PS:请忽略任何语法错误。这段代码是实际代码的精简。如果你想看完整的代码,请看这里

共有1个答案

危文乐
2023-03-14

piece组件中的componentWillmount只触发一次。

你是否也在每次道具改变时更新你的状态?例如,使用ComponentWillReceiveProps

你也可以直接在渲染函数中显示道具

render(){
    return(
        <span>{use the props directly here}</span>
    )
}

尽可能避免使用state,并坚持仅仅基于道具来呈现您的组件。

 类似资料:
  • parentcomponent.js ChildComponent.js 为什么在单击后,子组件仍然显示旧值而不重新呈现?

  • 我正在学习React钩子,这意味着我将不得不从类转移到函数组件。以前,在类中,我可以拥有与状态无关的类变量,我可以在不重新呈现组件的情况下更新这些变量。现在我试图用钩子重新创建一个组件作为函数组件,我遇到了这样一个问题:我不能(就我所知)为该函数创建变量,因此存储数据的唯一方法是通过钩子。然而,这意味着每当该状态更新时,我的组件将重新呈现。 我已经在下面的示例中说明了这一点,我试图将类组件重新创建

  • 但我的问题是我如何强制上面的功能组件重新呈现立即与钩子?

  • 我有一个数组列表 记录在子组件中,它返回给我初始数组。 从API更改数据后 如果我在函数中将该数组记录在父组件中,我将得到一个对象数组。 它正在更改 ,但子组件没有。 我该怎么办??

  • 是否有系统的方法来调试导致组件在React中重新呈现的原因?我放了一个简单的console.log()来查看它呈现多少次,但很难弄清楚是什么导致组件呈现多次,即在我的情况下(4次)。是否存在显示时间线和/或所有组件、树呈现和顺序的工具?

  • 在我点击提交按钮后,我如何使页面刷新或更新页面中的内容?我尝试将(我知道不是React方式,具有相同的结果)放入提交函数(、)中,但POST请求没有得到响应 OpenTickets.js CardConversation.jsx