React中如何在回调函数后正确设置State变量?
React useState更新后变量未即时生效的问题解决
你遇到的问题是React的useState更新是异步操作导致的:调用setallowedUsers后,当前渲染周期内的allowedUsers不会立刻变成新值,所以你立刻执行console.log拿到的还是初始的空数组。
正确的验证/使用方式:
- 用useEffect监听状态变化
当allowedUsers更新完成、组件重新渲染后,useEffect会触发,此时就能拿到最新的数组:
const [allowedUsers, setAllowedUsers] = useState([]); myService.getusers() .then(function (result) { if (result.allowedaccess) { setAllowedUsers(result.allowedaccess); } }); // 监听allowedUsers的变化,更新后执行 useEffect(() => { console.log(allowedUsers); // 这里会打印['bob', 'mary', 'chris'] }, [allowedUsers]);
- 直接验证接口返回值
如果只是想确认接口返回的内容是否正确,你可以在setAllowedUsers的代码块里直接打印result.allowedaccess——既然你调试时已经看到这个值是正确的,那状态更新本身是没问题的,只是需要等组件重新渲染才能拿到新的allowedUsers。
另外建议把setallowedUsers改成setAllowedUsers,符合React小驼峰的命名规范,代码可读性更好。
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

