Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 如何在下拉菜单的“一次更改中的反应”中更新useState中的数组元素状态?(这里我不是说对象数组)_Javascript_Reactjs_State_Use State - Fatal编程技术网

Javascript 如何在下拉菜单的“一次更改中的反应”中更新useState中的数组元素状态?(这里我不是说对象数组)

Javascript 如何在下拉菜单的“一次更改中的反应”中更新useState中的数组元素状态?(这里我不是说对象数组),javascript,reactjs,state,use-state,Javascript,Reactjs,State,Use State,每次切换到下拉菜单时,我都要更新状态。意味着保存状态并更新它,然后再次像这样。。。 我正在尝试以下代码: 我的React代码: var [state, setState] = useState({ page: 0, username: "Hey Baby!", filter: ["search", "story", 0], result: 0, processTime: 0 }); va

每次切换到下拉菜单时,我都要更新
状态。意味着保存状态并更新它,然后再次像这样。。。
我正在尝试以下代码:

我的
React
代码:

  var [state, setState] = useState({
    page: 0,
    username: "Hey Baby!",
    filter: ["search", "story", 0],
    result: 0,
    processTime: 0
  });

var { page, username, filter, result, processTime } = state;

var handleChange = name => e => {

    if (e.target.value == "popularity") {
      setState({
         ...state, filter: ["search", filter[1], filter[2]]
       });

        urls =
          "search~~"+
          filter[1] +
          "~0~" +
          filter[2];
    }
    if (e.target.value == "date") {
      setState({
      ...state, filter: ["search_by_date", filter[1], filter[2]]
      });

        urls =
          "search_by_date~~"+
          filter[1] +
          "~0~" +
          filter[2];
    }
    if (e.target.value == "stories") {
      setState({
        ...state, filter: [filter[0], "story", filter[2]]
      });

        urls =
          filter[0]+"~~story~0~" +
          filter[2];
    }
    if (e.target.value == "comments") {
      setState({
        ...state, filter: [filter[0], "comment", filter[2]]
      });

        urls =
          filter[0]+"~~comment~0~" +
          filter[2];
    }

  axios
        .get(`${process.env.REACT_APP_API}/posts/${urls}`)
      .then(function(response) {
        setState({
          result: response.data.datas.nbHits,
          processTime: response.data.datas.processingTimeMS
        });
        setPosts(response.data.datas);
        console.log(response.data.datas);
      })
      .catch(function(error) {
        console.log(error);
      });

return (
          <div>
        <div className="bg-white">
          <span>
            search{" "}
            <select onChange={handleChange('filter')}>
              <option value="stories">stories</option>
              <option value="comments">comments</option>
            </select>
          </span>
          <span>
            {" "}
            by{" "}
            <select onChange={handleChange('filter')}>
              <option value="popularity">popularity</option>
              <option value="date">date</option>
            </select>
          </span>

</div>
</div>
p.S.我不知道过滤器阵列元素状态是否得到更新。第一次更改“选择”菜单选项时,它会工作。但当我再次切换到不同的选项时,它会抛出上述类似的错误

setState({
   result: response.data.datas.nbHits,
   processTime: response.data.datas.processingTimeMS
});
我认为你的状态更新不正确。您应该像这样更新状态

setState({
    ...state, 
    result: response.data.datas.nbHits,
    processTime: response.data.datas.processingTimeMS
});
我认为你的状态更新不正确。您应该像这样更新状态

setState({
    ...state, 
    result: response.data.datas.nbHits,
    processTime: response.data.datas.processingTimeMS
});