【问题标题】:prevent re render component using React and React-memo防止使用 React 和 React-memo 重新渲染组件
【发布时间】:2023-02-26 06:38:57
【问题描述】:

我想防止使用 React 重新渲染组件。我已经阅读了一些指南,但我仍然无法让我的代码正常工作。 CreateItem 组件从 json 对象创建一个输入表单。当输入状态改变时,React 重新渲染所有组件。我会避免这种情况,因为它会导致一些问题。

我已经使用 React.memo 但我的代码仍然无法正常工作。这是实现此代码的好方法吗?如何更正我的代码?谢谢


function MyComponent() {
    
    return(
        <div className="row"> 
            {Array.from(new Map(Object.entries(json))).map((data) => (
                <CreateItem obj={data} />

            ))}

        </div>
    );
        
}



//function CreateDiv(props) {
const CreateDiv = React.memo((props) => {

    console.log("rendering ");

    return (
        <form name="myForm"  onSubmit= {formSubmit}>
            <div className="row">
                {Array.from(new Map(Object.entries(props.obj[1]))).map((data) => (
                <>
                {(() => { 
                     return(
                        <div className="col-sm-2">
                            <CreateItem obj={data[1]} />
                        </div>
                    )
                })()}
                </>
                ))}
            </div>
        </form>
    ); 
});

- - 编辑 - -

CreateItem 使用 CreateCheckBoxComponent 函数从 json 值创建具有默认状态的自定义复选框。 CreateCheckBoxComponent 代码如下:



function CreateCheckBoxComponent(props) {

    if(parseInt(props.obj.defaultValue) === 5)
        setChecked(false);
    else
        setChecked(true);

    return(
        <FormCheck
                label={props.obj.simbolName} 
                name={props.obj.idVar}
                type="checkbox"
                checked={checked}
                onChange={handleCheckBoxChange}
                sm={10}
            />                 
    );

}

HandleCheckBoxChange 工作正常并更改状态,但是当我单击复选框以更改标志时,CreateCheckBoxComponent 重新呈现并 它再次设置默认状态。我想避免这个问题,我认为防止重新渲染是一种解决方案。

【问题讨论】:

  • 你遇到了什么错误?
  • 首先,请为具有地图功能的元素提供一个唯一的键。

标签: javascript reactjs jsx react-memo


【解决方案1】:

React.备忘录仅防止自己重新渲染。

您已经考虑了以下事项。

  1. 如果孩子们正在使用React.备忘录但父母重新呈现 孩子们也会渲染。

  2. React.备忘录如果组件的 props 发生变化,则防止重新渲染。但如果状态发生变化,组件可能会重新渲染。

    注意:确保在使用 map 函数或任何迭代渲染元素/组件时始终为它们提供唯一的键。

    For more information click here

【讨论】:

  • 现在很清楚为什么我不能阻止重新渲染。现在考虑我想修复我的复选框,可以防止重新渲染是一个解决方案吗?
  • 抱歉,缺少一些代码,您在哪里设置选中状态?你在哪里定义了handleCheckBoxChange?你能提供完整的代码吗?所以我可以帮助你。
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 2022-01-19
  • 2021-02-14
  • 1970-01-01
  • 2018-12-02
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多