在 React JSX 与函数调用来呈现组件时,当涉及到函数调用或(标记)组件之间的差异时,问题的答案是“否”。
在这里,我有一个令人困惑的例子,其中函数调用和标记之间的差异导致焦点行为的变化。我相信有 React 专家在那里有一个合理的解释 - 不幸的是,我还没有到达那里;-)
下面是带有标记和函数调用之间注释差异的代码:
import React, {useState} from 'react';
function FocusRiddle() {
const [currentRow, setCurrentRow] = useState({firstName: 'Barack', lastName: 'Obama'});
// This keeps the focus correctly
return <div>{Att()}</div>;
// This loses the focus after every letter !!!
// return <div><Att /></div>;
function Att() {
return <div>
<h1>Welcome to Focus Riddle</h1>
<div>
<MyInput key={'firstName'} name={'firstName'} row={currentRow} action={updateRow}/>
</div>
<div>
<MyInput key={'lastName'} name={'lastName'} row={currentRow} action={updateRow}/>
</div>
<div>
<button onClick={() => alert(JSON.stringify(currentRow))}>Show Row</button>
</div>
</div>
}
function updateRow(name, value) {
setCurrentRow({...currentRow, [name]: value});
}
}
function MyInput({name, row, action}) {
return <input
value={row[name]}
onChange={(event) => action(name, event.target.value)}/>
}
export default FocusRiddle;
撒科打诨
相关分类