Reactjs 设置函数调用前的状态
在调用Reactjs 设置函数调用前的状态,reactjs,promise,react-hooks,Reactjs,Promise,React Hooks,在调用handleSearchClick中的resetStates功能之前,我无法设置page=1。当前,当调用resetStates时(在单击搜索按钮之后),它不会在第一次单击时将页面重置为1,但在第二次搜索时,它会这样做 我尝试使用异步等待,但这并不能在handleSearchClick之前将页面重置为1。如何在函数调用之前将页面重置为1?任何反馈都将不胜感激 这就是我目前正在做的: const resetStates = async () => { const
handleSearchClick
中的resetStates
功能之前,我无法设置page=1
。当前,当调用resetStates
时(在单击搜索按钮之后),它不会在第一次单击时将页面重置为1,但在第二次搜索时,它会这样做
我尝试使用异步等待
,但这并不能在handleSearchClick之前将页面重置为1。如何在函数调用之前将页面重置为1?任何反馈都将不胜感激
这就是我目前正在做的:
const resetStates = async () => {
const promise1 = setHasMore(true);
const promise2 = await setPage(1);
Promise.all([promise1, promise2])
.then(() => {
/* At this point I want page to equal 1 */
handleSearchClick();
})
.catch(error => {
throw new Error(error);
});
};
/**
* Handles event on search click
*/
const handleSearchClick = async () => {
setItems([]);
setIsLoading(true);
const base = handleBaseId();
const items = await fetchSearchPayload(page, value, option, base);
setIsLoading(false);
setInitialLoad(true);
setItems(items);
console.log('On Click', { option }, { page });
};
<SearchBar
onClickButton={resetStates}
onValueChange={handleChange}
value={value}
pageNum={page}
onEnter={handleSearchOnEnter}
/>
const resetStates=async()=>{
const promise1=setHasMore(真);
const promise2=等待设置页(1);
承诺。全部([承诺人1,承诺人2])
.然后(()=>{
/*此时,我希望page等于1*/
handleSearchClick();
})
.catch(错误=>{
抛出新错误(Error);
});
};
/**
*处理搜索单击时的事件
*/
const handleSearchClick=async()=>{
集合项目([]);
设置加载(真);
const base=handleBaseId();
const items=await fetchSearchPayload(页面、值、选项、基);
设置加载(假);
setInitialLoad(真);
设置项目(项目);
log('On Click',{option},{page});
};
状态更新程序是异步的
,但它不会返回承诺,因此您不能使用等待
来等待承诺完成。相反,您可以将页值作为参数传递
const resetStates = async () => {
setHasMore(true);
setPage(1);
handleSearchClick(1);
};
/**
* Handles event on search click
*/
const handleSearchClick = async (page) => {
setItems([]);
setIsLoading(true);
const base = handleBaseId();
const items = await fetchSearchPayload(page, value, option, base);
setIsLoading(false);
setInitialLoad(true);
setItems(items);
console.log('On Click', { option }, { page });
};
<SearchBar
onClickButton={resetStates}
onValueChange={handleChange}
value={value}
pageNum={page}
onEnter={handleSearchOnEnter}
/>
您可以从下面的帖子中参考useproval
的实现
状态更新程序是异步的
,但它不会返回承诺,因此您不能使用等待
来等待承诺完成。相反,您可以将页值作为参数传递
const resetStates = async () => {
setHasMore(true);
setPage(1);
handleSearchClick(1);
};
/**
* Handles event on search click
*/
const handleSearchClick = async (page) => {
setItems([]);
setIsLoading(true);
const base = handleBaseId();
const items = await fetchSearchPayload(page, value, option, base);
setIsLoading(false);
setInitialLoad(true);
setItems(items);
console.log('On Click', { option }, { page });
};
<SearchBar
onClickButton={resetStates}
onValueChange={handleChange}
value={value}
pageNum={page}
onEnter={handleSearchOnEnter}
/>
您可以从下面的帖子中参考useproval
的实现
页面是一种状态。我将其初始化为const[page,setPage]=React.useState(1)代码>如果我将1作为参数传递,它将不会更新为状态。有没有办法将其重置为1而不传递硬编码的数字?更新我的答案很高兴有帮助页面是一种状态。我将其初始化为const[page,setPage]=React.useState(1)代码>如果我将1作为参数传递,它将不会更新为状态。有什么方法可以将其重置为1而不传递硬编码的数字吗?更新我的答案很高兴能提供帮助