【发布时间】:2020-02-16 07:55:48
【问题描述】:
我有以下代码:
function MyComponent( props ) {
let arrSize = 5;
const [arr, setArr] = useState( () => {
let initial = new Array(arrSize);
for(let i=0; i<arrSize; i++) initial.push({ foo: 'foo', bar: 'bar'});
return initial;
});
mouseEventCallback = (e) => {
// ...
let tmp = arr;
// ...
setArr( tmp );
}
let cmp = [];
for(let i=0; i<arrSize; i++) {
cmp.push( <span key={i} className={arr[i].foo}></span> );
}
return (
<div>
{cmp}
</div>
)
}
当鼠标回调调用几次时,我遇到了一个问题:状态参数更改正常(使用反应组件检查 Chrome 网络浏览器中的选项卡),但具有此状态的 DOM 元素并未全部重新渲染 - 其中一些具有旧状态。
当我添加虚拟状态时 - 一切正常:
function MyComponent( props ) {
let arrSize = 5;
const [arr, setArr] = useState( () => {
let initial = new Array(arrSize);
for(let i=0; i<arrSize; i++) initial.push({ foo: 'foo', bar: 'bar'});
return initial;
});
const [dummy, setDummy] = useState(0);
mouseEventCallback = (e) => {
// ...
let tmp = arr;
// ...
setArr( tmp );
setDummy( Math.rand() );
}
let cmp = [];
for(let i=0; i<arrSize; i++) {
cmp.push( <span key={i} className={arr[i].foo}></span> );
}
return (
<div dataTest={dummy}>
{cmp}
</div>
)
}
如何改进我的代码并以正确的方式解决我的问题?
【问题讨论】:
标签: javascript reactjs mouseevent react-hooks react-functional-component