javascript - 从 React Hooks 中的购物项目中删除项目
问题描述
在进行有关 React Hooks 的 Codecadamy 练习时,我遇到了一个我无法理解的代码。
在以下代码中检查:onClick={() => removeItem(index)}
<ul>{cart.map((item,index) => <li key={index} onClick={() => removeItem(index)} >{item}</li>)}</ul>
为什么我们不能简单地写: onClick={removeItem(index)} // 当我尝试这样做时,代码不起作用。
onClick={removeItem(index)}
虽然我已经完成了代码,但我可以理解和之间的区别onClick={() => removeItem(index)}
。
在相同的代码中,以下示例运行良好(当我尝试将项目添加到列表中时。)
{produce.map((item) => <button key={item} value={item} onClick={addItem}>{item}</button>)};
在上面的例子中,onClick={addItem}
运行良好。
这是完整的代码:https ://gist.github.com/sixpl/8141196fc688949ccb51b4459e645b34
感谢您的时间。
解决方案
使用{removeItem(argument)}
时,您实际上是在进行函数调用。JSX 表达式(你在里面提到的{ }
)将被评估并且这个函数将被调用。将其包装在函数中可确保我们指示单击时要调用的内容,而不是调用它。前任:{()=>{ yourActualFunctionCall(argument) }}
使用{addItem}
时,您表示单击时要调用的函数是addItem
。注意,( )
函数后面没有,所以addItem
不会调用。
推荐阅读
- javascript - PHP单击链接而不是行切换
- c# - 4.10 带有 NuGet 包参考的插件无法正确部署
- git - 掌舵点存储库到 monorepo 包?
- angular - 带有 Jest 单元测试的 Angular 6
- mysql - 两个表左连接但是如果我在表中有额外的行那么它应该是空的
- c# - C#自动化多行字符串修剪
- sprite-kit - 如何使用 Spritekit 实现流畅的同时运行和跳跃动作,如超级马里奥
- python - f.写错误。必须是 str 而不是 resultnet
- javascript - 在 mongodb 中使用 $inc 和 $addToSet
- python - 如何解决 pymysql.err.ProgrammingError: 1064 - 在 mysql 上保存数据?