请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

https://img1.sycdn.imooc.com//szimg/6151641209f77ac808810540.jpg

https://img1.sycdn.imooc.com//szimg/6151673309742df211380531.jpg

正在回答 回答被采纳积分+3

1回答

阿莱克斯刘 2021-09-29 07:38:48

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

//img1.sycdn.imooc.com//szimg/6153a606099323b916620400.jpg

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

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

//img1.sycdn.imooc.com//szimg/6153a6dd0969cc9b13600464.jpg

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

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

1 回复 有任何疑惑可以回复我~
  • 我看到它的函数签名是 (value: React.SetStateAction<AppStateValue>) => void 了,不过我这里也是和楼主一样,传递对象进去却没有报错,而且功能正常运行。。。
    回复 有任何疑惑可以回复我~ 2022-11-22 10:24:14
  • const Robot: React.FC<RobotProps> = ({ 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 22:11:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信