reactjs - React 不会立即设置状态
问题描述
我刚开始学习reactjs。我正在尝试使用从 API 接收的对象设置状态,然后显示状态的结果。当我尝试显示结果时,它显示状态对象未定义。当我第二次查询 API 时,它会将状态设置为从 API 接收的对象。
const SearchByName = () => {
const [recipes, setRecipes] = useState({
recipesObj: {},
loding: false,
});
const fetchData = async () => {
try {
setRecipes({ loading: true });
const res = await axios.get(`url_to_API`);
console.log(res.data) // prints returned object from API
setRecipes({ recipesObj: res.data, loading: false });
console.log(recipes.recipesObj); // empty object
} catch (err) {
console.error(err);
}
};
};
const onSubmit = (e) => {
e.preventDefault();
fetchData();
setSearchStr('');
};
解决方案
您将状态替换为{ loading: true }
,此处recipes.recipesObj
将变为未定义。您需要预先添加较早的状态。尝试像这样更改,或者您可以使用不同state
的方式来管理loading and data
const fetchData = async () => {
try {
setRecipes({ ...recipes, loading: true }); // Here was the problem
or setRecipes({ recipesObj: {}, loading: true });
const res = await axios.get(`url_to_API`);
console.log(res.data) // prints returned object from API
setRecipes({ recipesObj: res.data, loading: false });
console.log(recipes.recipesObj);
} catch (err) {
console.error(err);
}
};
};
推荐阅读
- r - 将 csv 文件移动到存档中的特定命名文件夹
- android - 每次推送到 Play 商店内部发布轨道后获取未知用户注册
- python - 使用 Python 在 Mac 上自动化 Outlook
- javascript - Gmail API:在没有用户交互的情况下应用身份验证令牌时出现问题
- javascript - 表单验证失败后如何显示tippy.js工具提示
- python - 多次禁止使用标志
- java - Android 如何使用。回收视图
- python - 无法从 with 语句中获取返回值?
- hive - Athena (Hive/Presto) Parquet vs ORC 计数查询
- r - 整理 _lm 类的对象