React中useState的setSelectedAccount函数体定义位置疑问
React
setSelectedAccount 相关逻辑解答 setSelectedAccount 的函数体定义位置
- 这个函数不是业务代码中手动编写定义的,它是React框架
useState钩子内置返回的状态更新方法,具体函数实现在React核心源码内部,当前项目的业务代码里不存在它的自定义函数体。 - 当你编写
const [selectedAccount, setSelectedAccount] = useState({})时,React内部会为当前组件分配独立的状态存储位,将初始值设为传入的空对象{},同时生成一个和该状态位绑定的更新函数返回,这个返回值就是你拿到的setSelectedAccount。 - 后续你将它作为props传递给
Account子组件、子组件从props中解构获取的过程,都只是传递这个内置更新函数的引用,没有重新定义函数的执行逻辑。
useEffect 中的find方法是否为setSelectedAccount的函数体
- 完全不是,二者是完全独立的两个逻辑。
- 你贴出的
useEffect代码执行顺序是:先执行find方法,从accounts.data数组中匹配出id和当前下拉框选中值values.selectAccount相等的账号对象,再把这个查找结果作为入参传入setSelectedAccount,触发React更新selectedAccount状态。 - 以下是等价拆分写法,逻辑和原代码完全一致,可以更清晰看到二者的关系:
useEffect(() => { // 第一步:执行find方法,拿到要设置的目标账号对象 const matchedAccount = find( accounts.data, account => values.selectAccount === account.id ); // 第二步:调用React内置的状态更新函数,传入查到的目标值触发更新 setSelectedAccount(matchedAccount); values.varX = ""; }, [values.selectAccount]);
- 这里的
find本质是数组查找工具方法(通常是Lodash的_.find或原生数组方法的封装),作用仅为筛选出目标数据,和setSelectedAccount本身的内部实现没有任何关联。
内容的提问来源于stack exchange,提问作者user2043789
相关产品推荐
相关产品推荐

