代码之家  ›  专栏  ›  技术社区  ›  watery

react在每个材质ui选项卡开关上重新创建我的组件

  •  4
  • watery  · 技术社区  · 6 年前

    我在应用程序中添加了一个Material UI Tabs组件,它的编码与 Simple Tabs demo .

    不过,我发现每个选项卡中的组件都位于:

    render() {
        /... 
        {
            value === 0 && < MyComponent1 / >
        } {
            value === 1 && < MyComponent2 / >
        } {
            value === 2 && < MyComponent3 / >
        }
        /...
    }
    

    正在重新创建(我可以用 console.log() 在他们的构造器中)每次我切换tab时都会失去它们的状态,而我希望它们只是被卸载和重新装载。

    我是做错什么了还是这是正常的行为?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Christopher Moore    6 年前

    这是组件的预期行为。在安装之前,会调用构造函数。如果您不确定流程,可能需要重新阅读文档

    https://reactjs.org/docs/react-component.html#constructor

    如果希望组件在隐藏/显示状态时保持状态,可以通过标志(或 className )指示是否隐藏组件。

    render() {
      /... 
      < MyComponent1 hidden={value === 0} / >
      < MyComponent2 hidden={value === 1} / >
      < MyComponent3 hidden={value === 2} / > 
      /...
    }
    

    然后,组件可以使用道具更新get显示的内容,同时仍然保持状态。你可以添加一个用css隐藏的类。

        2
  •  1
  •   Shamil Mammadov    6 年前

    这很正常。因为每个组件卸载时状态都会重置。如果不想丢失组件的状态,可以将其存储在redux中,也可以从父组件的属性设置新状态。

    render() {
      return (
        {value === 0 && <MyComponent1 someProps={prop} />}        
        {...}
      )
    }
    

    在子组件中

    constructor(props){
      super(props);
      this.state = {
         param: props.someProps
      }
    }
    

    但不管怎样,最好的方法是使用redux。