Reactjs 反应挂钩-重置下拉菜单

Reactjs 反应挂钩-重置下拉菜单,reactjs,react-hooks,Reactjs,React Hooks,我正在使用React钩子测试多个select/option元素。我能够从本地列表填充下拉菜单,还可以使用axios API getter方法。最后,我创建了一个重置按钮来重置这些下拉值,例如选择一个状态和选择一个作者,但无法使其工作,我不确定重置这些值的最佳方法是什么 我没有在这里发布代码,而是在这里添加了指向此示例项目的链接。非常感谢您的任何提示/指点 您唯一缺少的实际上是select元素中的only value属性 但是,我不认为状态选择器组件需要是有状态的组件。最好让它成为受控/哑组件,只

我正在使用React钩子测试多个select/option元素。我能够从本地列表填充下拉菜单,还可以使用axios API getter方法。最后,我创建了一个重置按钮来重置这些下拉值,例如选择一个状态和选择一个作者,但无法使其工作,我不确定重置这些值的最佳方法是什么

我没有在这里发布代码,而是在这里添加了指向此示例项目的链接。非常感谢您的任何提示/指点


您唯一缺少的实际上是select元素中的only value属性

但是,我不认为状态选择器组件需要是有状态的组件。最好让它成为受控/哑组件,只从父级获取道具,并让父级控制其值和行为


非常感谢。伙计,我的头撞到墙上了。最初,我将StateSelector组件作为无状态组件,为了使其工作,我对该组件进行了大量更改。我假设如果我可以更改其中一个statefull变量,它将在StateSelector中重新呈现dom…:
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
import axios from "axios";
import StateSelector from "./StateSelector";
import Footer from "./Footer";

const SelectTesting = () => {
const reqUrl = "https://hn.algolia.com/api/v1/search?query=redux";

const initialStateValue = [{ id: 0, value: " --- Select A State --- " }];
const initialAuthorValue = [" --- Select an Author --- "];

const allowedState = [
  { id: 1, value: "Alabama" },
  { id: 2, value: "Georgia" },
  { id: 3, value: "Missisippi" }
];

const [authors, setAuthors] = useState(initialAuthorValue);
const [allStates, setAllSelected] = useState(initialStateValue);
const [stateSelected, setStateSelected] = useState(initialStateValue[0].value);

let authorComponent = null;

// useEffect to get states
useEffect(() => {
  console.log("Inside effect");
  const stateValues = initialStateValue;
  allowedState.map(sel => {
    stateValues.push(sel);
    return setAllSelected(stateValues);
  });
}, []);

// useEffect to get Authors
useEffect(() => {
  console.log("Inside effect 2");
  axios(reqUrl).then(result =>
    result.data.hits.map(res => {
      initialAuthorValue.push(res.author);
      return setAuthors(initialAuthorValue);
    })
  );
}, []);

authorComponent = (
  <select>
    {authors.map((author, index) => (
      <option key={index}>{author}</option>
    ))}
  </select>
);

const stateSelectionHandler = event => {
  const value = event.target.value;
  console.log(allStates);
  const stateIndex = allStates.findIndex(state => state.value === value);
  console.log(event.target.value, allStates, "index:", stateIndex);
  setStateSelected(event.target.value);
};

const resetClickHandler = () => {
  console.log("reset was clicked");
  setStateSelected(initialStateValue[0].value);
};

console.log("Inside Index.js Main");

return (
  <div>
    <hr />
      <StateSelector
      selectedState={stateSelected}
      allStates={allStates}
      onStateSelection={stateSelectionHandler}
      />
    <hr />
    <label>Author:</label>
    {authorComponent}
   <hr />
   <Footer onResetClick={resetClickHandler} />
  </div>
);
};

const rootElement = document.getElementById("root");
ReactDOM.render(<SelectTesting />, rootElement);