【发布时间】:2021-09-02 18:26:54
【问题描述】:
我在尝试使用 React.js 制作 TODO 应用程序时提出了以下问题 我试图为每个任务制作和更新功能。为此,我制作了一个按钮,单击时调用一个函数“update”,该函数调用作为 App.js 中定义的 prop 传递的函数,该函数遍历任务数组,找到要修改的那个并执行它的操作,然后它设置新状态
App.js
function App() {
const [taskItems, settaskItems] = useState([]);
const updateTask = (task,newname) =>{
const findAndModify=()=>{
let tasks = [...taskItems] // Why let task=taskItems doesnt work?
for (let index = 0; index < tasks.length; index++) {
const t = tasks[index];
if (t.name === task.name){
t.name = newname
}
}
return tasks
}
settaskItems(findAndModify())
}
}
我的 TaskRow 组件如下
<TaskRow task={task} key={task.id} toggleTask={toggleTask} updateTask={updateTask}></TaskRow>
在我的 TaskRow.js 组件的定义中,我有以下代码
export const TaskRow = (props) => {
const update = () => {
const newname = "hello";
props.updateTask(props.task, newname);
};
return (
<tr key={props.task.id}>
<td>{props.task.name}</td>
<td>
<input
type="checkbox"
checked={props.task.done}
onChange={() => props.toggleTask(props.task)}
/>
</td>
<td>
<button className="btn btn-success mx-1" onClick={update}>
Actualizar
</button>
</td>
</tr>
);
};
问题来了,如果在 findAndModify 而不是做 let tasks = [...taskItems] 我做 task=taskItems更新任务的描述在发生另一次更改之前不会重新呈现,但如果对数据进行 console.log,它确实已被修改 这是为什么呢? [...] 运算符与常规变量赋值有何不同? 我研究过 JS 中的解构,但没有人谈论这个运算符的使用和 React.js 中的常规 var 赋值之间的某种区别
【问题讨论】:
标签: javascript reactjs