【问题标题】:How to prevent re render in react switch button after change button state更改按钮状态后如何防止在反应开关按钮中重新渲染
【发布时间】:2021-09-19 08:17:21
【问题描述】:

我有一个文本字段,其默认状态为 false,并且该文本字段被禁用。在我单击反应开关按钮后,我的文本字段已启用,并且其状态更改为 true。但是在我浏览另一个页面并返回上一页后,我的 tex 字段再次被禁用,其状态设置为 false。但我不需要那个。转到另一个页面后,我需要停止重新渲染我的开关和文本字段。我怎样才能做到这一点...? 如果你能帮助我..这意味着很多。谢谢

//Switch State
const [openSwitch, setOpenSwitch] = useState({
    checkedA: true,
    checkedB: false,
});

//Text field state
const [disable, setDisable] = useState(true);


// Switch Handler
const switchHandler = (event) => {
    setOpenSwitch({...openSwitch, [event.target.name]: 
event.target.checked});
    setDisable(!disable);
};


//Switch function
        <Switch
             checked={openSwitch.checkedB}
             onChange={switchHandler}
             color="primary"
             name="checkedB"
             inputProps={{'aria-label': 'primary checkbox'}}
          />

//Text field
   <Autocomplete 
     disabled={disable}
    >
  </Autocomplete>

这是默认设置:

这是我返回另一个页面后需要设置的方式:

【问题讨论】:

  • 如果您使用的是redux,您可以将状态设置为redux。但另一种解决方案可以是localStorage

标签: reactjs react-redux react-hooks


【解决方案1】:

这不是通过在页面之间移动来重新渲染您的组件将再次安装和卸载的问题。当您移回页面时,就像呈现了一个新组件,并且在新组件中,您的默认禁用状态为 false。

有多种方法可以解决此问题,您可以将状态管理器传递到启动路由的位置,例如应用组件:

const App = () => {
    const [inputDisable, setInputDisable] = useState(false);
    
    ...

    return (
        ...
            <YourComponent disable={inputDisable} setDisable={setInputDisable}/>
        ...
    );
};

但这不是一个好习惯。您可以使用 React Context 来解决您的问题,也可以使用 Redux 等状态管理库。这些是更好的方法,我建议同时学习它们

【讨论】:

    【解决方案2】:

    为功能组件存储全局状态的最简单和标准的方法是使用上下文。

    https://reactjs.org/docs/context.html

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2017-03-24
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多