javascript - 错误调用 API
问题描述
const [clientIfFromSearchWebitel, setClientIfFromSearchWebitel] = useState(
undefined
);
useEffect(() => {
console.log('clientIfFromSearchWebitel', clientIfFromSearchWebitel);
if (clientIfFromSearchWebitel && clientIfFromSearchWebitel !== undefined && clientIfFromSearchWebitel !== '') {
axios
.post('https://extapi.megabank.ua/dev/ops/api/v1/getEntity/CASES', {
filters: [
{
comparison: 'eq',
fieldName: 'client_id',
fieldValue: clientIfFromSearchWebitel
? clientIfFromSearchWebitel
: undefined,
operation: 'OR',
},
],
})
.then(data => setFilterData(data.data));
}else {
axios
.post('https://extapi.megabank.ua/dev/ops/api/v1/getEntity/CASES', {
filters: [],
})
.then(data => setFilterData(data.data));
}
}, [clientIfFromSearchWebitel])
我有一个clientIfFromSearchWebitel状态,当组件第一次出现时,这个状态是未定义的,当组件再次更新时,值会根据应该调用的API写入它,但是调用API而不是1次- 2次,由于第一次状态未定义,第二次有值,这种情况如何解决?
解决方案
我认为您在谈论https://reactjs.org/docs/hooks-faq.html#can-i-run-an-effect-only-on-updates
const fetchNow = useRef(false);
useEffect(() => {
if (fetchNow.current) {
// do fetch now -- your existing code
}
});
你在哪里setClientIfFromSearchWebitel()
替换fetchNow.current = true
这样你就可以避免 useState 和 useEffect 中的条件。
推荐阅读
- powerapps - PowerApps:无法在选择 SharePoint 列上筛选/搜索数据表
- swift - 在 Picker 上设置默认起点
- python-3.x - 如何使用 sqlite 窗口函数对日期时间进行分组?
- web-crawler - Apache Nutch 1.17,将带有一些元数据的解析内容转储为 JSON
- laravel - Laravel 护照:分配范围以访问令牌覆盖 oauth/令牌路由
- python - Python 如何支持这个与运行时多态性相关的常见问题?
- java - WSL Bash 在 PATH 中找不到 java
- php - 对自定义 symfony 约束进行单元测试
- javascript - 使用带有负值的accounting.FormatMoney,Accounting.js
- javascript - 防止 .map 为不符合特定条件的值返回 undefined