javascript - 将数组映射到 JSX 组件数组,但仅在 prop 发生更改时更新数组中的正确索引
问题描述
我有:
const FooComponent = (props) => {
const inputsArray = props.arrayOfInputs.map(
(field) => <Input value={props.inputValues[field.id].value} key={...}/>
)
return inputsArray
}
它呈现多个 <Input>
s 的列表, my被记忆,因此只要在只有s<Input>
中存在新值时,新值就会被重新呈现。但是,函数总是运行到它的完整性,有没有办法让 javascript/react 不重新运行函数并简单地修改具有新道具的元素?props.state.someInput.value
<Input>
map()
map()
inputsArray
我并不是说要避免重新渲染,我的问题是要避免map()
函数运行。FooComponent
当避免重新渲染时,则map()
不会运行,但如果inputsArray
重新渲染内部的元素,map()
则整个列表的 仍然会运行。
解决方案
是的,有,这里memo
说明的用途
如果你的函数组件在给定相同的 props 的情况下呈现相同的结果,你可以将它包装在对 React.memo 的调用中,以便在某些情况下通过记忆结果来提高性能。这意味着 React 将跳过渲染组件,并重用上次渲染的结果。
首先,将您的输入提取到一个组件并用 memo 包装。
const InputComponent = React.memo((props) => {
return <Input value={props.inputValues[field.id].value} key={...}/>
});
下一个:
const FooComponent = (props) => {
const inputsArray = props.arrayOfInputs.map(
(field) => <InputComponent value={props.inputValues[field.id].value} key={...}/>
)
return inputsArray
}
props.inputValues[field.id].value
除非已更改,否则记忆化的输入组件不会重新渲染
推荐阅读
- java - 更改 PDF 文件大小时图像模糊
- mysql - 错误 MY-011065 服务器无法确定守护程序是否正在运行
- xml - 可以覆盖的 Android Studio 默认字体
- python - 如果python中没有传递参数,如何发送消息
- python - 如何在 Python 中读取音频文件目录?
- python - 我的损失函数在训练期间没有得到更小的值
- python-3.x - 基于条件的舍入浮点值
- python - Discord.py 如何提及/显示使用该命令的人的用户名?
- linux - Linux (POP OS) JetBrains 应用程序没有顶部工具栏?
- python - 在 plotly 中向每个条形图添加两个文本