Reactjs 我总是落后一步
我在重置第1页时遇到问题。在Reactjs 我总是落后一步,reactjs,react-hooks,Reactjs,React Hooks,我在重置第1页时遇到问题。在handleSearchClick中,我有设置页面(1),但它的一次单击延迟,因此第二次单击后页面将重置为1 这是我当前的代码 我还尝试在按钮本身中重置页面,但得到一个react限制渲染数量,以防止出现无限循环错误消息 这就是我试着做的 如果您对如何在不延迟的情况下重置页面有任何建议,我们将不胜感激 似乎您正在尝试设置页面(异步),然后立即在fetchSearchPayload调用中使用page状态。考虑到您总是在那里硬编码将页面设置为1,您也可以在fetchSear
handleSearchClick
中,我有设置页面(1)
,但它的一次单击延迟,因此第二次单击后页面将重置为1
这是我当前的代码
我还尝试在按钮本身中重置页面,但得到一个react限制渲染数量,以防止出现无限循环
错误消息
这就是我试着做的
如果您对如何在不延迟的情况下重置
页面
有任何建议,我们将不胜感激 似乎您正在尝试设置页面(异步),然后立即在fetchSearchPayload
调用中使用page
状态。考虑到您总是在那里硬编码将页面设置为1,您也可以在fetchSearchPayload
调用中硬编码1
您可以采用的另一种方法是,仅在页面更新时执行异步调用,方法如下:
React.useEffect(() => {
const database = handleBaseId();
const items = await fetchSearchPayload(page, value, option, database);
setIsLoading(false);
setItems(items);
}, [ page ]);
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setItems([]);
setPage(1);
};
问题是状态更新与hooks状态更新程序是异步的,就像react组件中的
setState
。解决方案是手动传递页面以运行,而不是依赖于状态
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setItems([]);
const database = handleBaseId();
setPage(1);
const items = await fetchSearchPayload(1, value, option, database);
setIsLoading(false);
setItems(items);
};
const [count, setCount] = React.useState(0);
React.useEffect(() => {
setPage(1);
}, [count]);
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setCount(count+1);
setItems([]);
const database = handleBaseId();
setPage(1);
const items = await fetchSearchPayload(page, value, option, database);
setIsLoading(false);
setItems(items);
};
React.useEffect(() => {
const database = handleBaseId();
const items = await fetchSearchPayload(page, value, option, database);
setIsLoading(false);
setItems(items);
}, [ page ]);
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setItems([]);
setPage(1);
};
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setItems([]);
const database = handleBaseId();
setPage(1);
const items = await fetchSearchPayload(1, value, option, database);
setIsLoading(false);
setItems(items);
};