4-8节的addToCart函数里面setState里为什么要传函数,而不直接更改state的值呢

来源:4-8 【全局数据传递】组件化Context Provider

def_myself

2021-09-27

4-8节的addToCart函数里面setState的参数为什么要传函数,而不直接更改state的值呢?分别如以下图一图二

http://img.mukewang.com/szimg/6151641209f77ac808810540.jpg

http://img.mukewang.com/szimg/6151673309742df211380531.jpg

写回答

1回答

阿莱克斯刘

2021-09-29

hello同学,截图中的setState定义在代码第13行(红箭头标注),其实是我们自己定义的setState,它可不是react类组件的内建方法“this.setState()”。这俩只是名字一样而已,完全是两码事。

//img.mukewang.com/szimg/6153a606099323b916620400.jpg

在截图中,我们也能看到setState的类型,它就是一个接受value返回void的方法。

所以,如果我们去掉函数参数,代码就会报错,因为他的参数类型出错了:

//img.mukewang.com/szimg/6153a6dd0969cc9b13600464.jpg

请注意,Robert函数组件中的setState与类组件this.setState是不一样的东西,所以在这里的用法是有区别的。

谢谢你的提问,不知道我讲清楚了没有?如果还不明白,请继续提问

1
2
yossarian42
const Robot: React.FC = ({ id, name, email }) => { const appState = useContext(appContext); const appSetState = useContext(appSetStateContext); const addToCart = () => { if (appSetState) { appSetState({ ...appState, shoppingCart: { items: [...appState.shoppingCart.items, { id, name }], }, }); } }; 通过context hook获取的setState就是和state绑定的吧,直接传新state的值进去,运行也没有问题
2024-11-04
共2条回复

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

1993 学习 · 1015 问题

查看课程