javascript - 无法理解反应中的功能
问题描述
我学会了做出反应,并制作了一个基本的待办事项清单。几乎我理解的所有方面,除了一个对我来说似乎很奇怪。
所以在反应中,我们通常调用这样的函数:button onClick = {btnClicked}
。在我的待办事项列表中,当我想删除一个任务时,我需要调用一个调用另一个函数的函数。它看起来像这样:
div onClick = {() => removeItem(index)}> div
我不明白为什么我们在这里调用一个调用另一个函数的函数而不仅仅是调用{removeItem}
函数。
如果我只写
div Onclick = {removeItem}
该程序没有正确运行(它删除了项目,但没有选择一个)。
请帮忙
const Todo = () => {
const [value, setValue] = useState({
items: [],
item: ""
});
const addItem = event => {
event.preventDefault();
if (value.item == "") {
alert("Please fill in the input");
} else {
setValue({
items: value.items.concat(value.item),
item: ""
});
console.log(value.items);
}
};
const removeItem = index => {
const list = value.items;
list.splice(index, 1);
setValue({ items: list });
};
return (
<div className={s.TodoList}>
<h1 className={s.Title}>Todos</h1>
<div>
<form onSubmit={addItem} className={s.TodoForm}>
<div className={s.Wrapper}>
<h1>Add an item...</h1>
<input
type="text"
name="item"
value={value.item}
onChange={e => setValue({ ...value, item: e.target.value })}
placeholder="Type item here"
/>
<button>Add</button>
{value.items.map((item, index) => {
return (
<ul>
<li key={index}>
{item}
<div onClick={() => removeItem(index)}>
<i className="fas fa-times" />
</div>
</li>
</ul>
);
})}
</div>
</form>
</div>
</div>
);
};
解决方案
这是一个很好的问题!onClick
prop 期望被传递一个函数。
1. () => removeItem(index) is a function.
2. removeItem is also a function
那么它为什么会破裂呢?
您的removeItem
函数需要一个index
参数。单击时,React 库实际上会调用您提供给onClick
事件对象的函数。通过用它替换您的事件处理程序并打开浏览器的开发人员控制台来检查它。
// Original
onClick = {() => removeItem(index)}
// New
onClick = {(event) => {
console.log(event)
removeItem(index)
}}
当你只传递它时removeItem
,React 实际上是像这样调用函数而不是withindex
onClick={removeItem}
// What React does on click
removeItem(event)
这就是我们创建匿名函数的原因——removeItem
用我们期望的点击调用。
// Ignores event object
onClick = {() => removeItem(index)}
推荐阅读
- java - 在 jooq groupConcatDistinct 方法上指定分隔符
- django - 使用 Form 或 ModelForm 更新 QuerySet
- java - 如何检查字符串是否为空
- javascript - 如何在 botframe 工作中添加自定义语音
- codeigniter-3 - CodeIgiter 3.1.9 中覆盖控制器 MY_Controller 中的全局变量
- python - Python 中最近更新的文件列表
- python - 如何检查熊猫中是否缺少任何字符串
- java - 是否在 lambda 表达式中实例化了一个类?
- python - Scrapy:如何在一个redis队列中使用多个蜘蛛
- vim - 在 VIM 中粘贴/完成粘贴时更新状态行