【发布时间】: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