Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (reactjs)如何设置承诺或将当前状态设置到本地存储中_Javascript_Reactjs_Session Storage - Fatal编程技术网

Javascript (reactjs)如何设置承诺或将当前状态设置到本地存储中

Javascript (reactjs)如何设置承诺或将当前状态设置到本地存储中,javascript,reactjs,session-storage,Javascript,Reactjs,Session Storage,我正在尝试构建一个非常简单的应用程序来搜索文章,并使用localstorage来显示关于每篇文章的更多信息,但是当我出于某种原因设置保存到会话存储时,我假设是保存初始或以前的状态,因为我需要为此设置async,但我不知道如何设置 我现在就是这样得到它的,findArticleQuery是在handleSubmit上调用的 useEffect( () =>{ findArticlesQuery(); } ,[] ) const find

我正在尝试构建一个非常简单的应用程序来搜索文章,并使用localstorage来显示关于每篇文章的更多信息,但是当我出于某种原因设置保存到会话存储时,我假设是保存初始或以前的状态,因为我需要为此设置async,但我不知道如何设置

我现在就是这样得到它的,findArticleQuery是在handleSubmit上调用的

 useEffect(
      () =>{
          findArticlesQuery();
      } ,[]
  ) 
  const findArticlesQuery = (query) => {   //search function
    axios.get(`url`)
    .then(res => {                
      [res.data].map((val) =>(        
        setState(val)         
      ))                                     
    }).catch(error => {
      console.log(error.response)
    });        
  }

  const handleSubmit = (e) => {
    e.preventDefault();
    findArticlesQuery(e.target.search.value)
    sessionStorage.setItem('localData', JSON.stringify(state))   //<--here I get the value of the previous state          
    e.target.search.value = '';       
  }
我需要使用会话存储,因为我将有一个详细的文章组件页面


谢谢你们

您可以从findArticlesQuery获得搜索结果,如下所示

...
  const findArticlesQuery = (query) => {   //search function
    return axios.get(`url`)
    .then(res => {                        
      setState(res.data)
      return res.data
    })   
  }

  const handleSubmit = (e) => {
    e.preventDefault();
    findArticlesQuery(e.target.search.value)
       .then(val => sessionStorage.setItem('localData', JSON.stringify(val)))
    e.target.search.value = '';       
  }

为了使用React钩子在localStorage中保存状态,我使用了一些非常方便的方法


免责声明:我不是此库的创建者。

为什么要使用会话存储?State应该做作业集State有一个回调,只有在set State完成其工作后才会调用该回调。您可以尝试将会话存储调用放在那里。例如,类似,但我还没有测试。。。setStateval,sessionStorage.setItem'localData',JSON.stringifystate除非在多个组件之间缓存或共享会话/本地存储,否则您不需要会话/本地存储。@ChrisAdams OP正在使用挂钩,因此setState不太可能有回调。有趣的是,如果我按两次submit,它会得到正确的值@ChrisAdams