在另一个函数之前强制 setState

Posted

技术标签:

【中文标题】在另一个函数之前强制 setState【英文标题】:Force setState before another function 【发布时间】:2021-10-08 19:52:32 【问题描述】:

如何在调用fetchSearchedMovie(searchedMovie) 函数之前强制完成setSearchedMovie


  const  updateMovies, searchedMovie, setSearchedMovie  = useContext(MoviesContext); 

  const fetchMoviesList = (event: any) => 
    const searchedMovieValue = event.target.value;
    setSearchedMovie(searchedMovieValue);

    if (searchedMovie) 
      fetchSearchedMovie(searchedMovie)
        .then((res) => updateMovies(res))
        .catch(() => updateMovies([]));
     else 
      fetchMovies()
        .then((res) => updateMovies(res))
        .catch(() => updateMovies([]));
    
  

【问题讨论】:

【参考方案1】:

使用useEffect 钩子:

const  updateMovies, searchedMovie, setSearchedMovie  = useContext(MoviesContext); 

const fetchMoviesList = (event: any) => 
    const searchedMovieValue = event.target.value;
    setSearchedMovie(searchedMovieValue);


useEffect(()=>
    if (searchedMovie) 
      fetchSearchedMovie(searchedMovie)
        .then((res) => updateMovies(res))
        .catch(() => updateMovies([]));
     else 
      fetchMovies()
        .then((res) => updateMovies(res))
        .catch(() => updateMovies([]));
    
, [searchedMovie, fetchSearchedMovie, fetchMovies, updateMovies]);

如果您希望每次通过 setSearchMovie 更改 searchedMovie 时都运行此功能,您甚至可以将此挂钩集成到 MoviesContextProvider(我假设您使用 useState 进行这些操作)

【讨论】:

这行得通,谢谢!我认为我应该使用 useEffect() 虽然我没有得到组件的哪个部分来做它

以上是关于在另一个函数之前强制 setState的主要内容,如果未能解决你的问题,请参考以下文章

在另一个成员函数中调用成员函数时,在“int”之前的预期主表达式

在另一个单独的异步调用解决之前,如何防止/锁定函数返回?

在一个控制器上强制执行 https,在另一个控制器上强制执行 http

如何强制组织模式在另一个框架中打开链接?

即使数据没有改变,我可以用 setState 强制重新渲染吗?我的 GUI 不会更新?

在另一个标题中强制模板实例化