用 React 更新 <select>

Update a <select> with react

我有一个可以 select 编辑的标签 select,但我确实有一个应该更新选项的下一个和上一个按钮。

我尝试在每次单击按钮时使用 sort() 来做到这一点,但是当我 select 选择该选项然后使用下一步按钮时,select 不再更新。

如何使用状态动态更新 select 选项并使其正常工作?

组件Select

export default function RegistroNavSelect(props) {

      const atualizarLista = (e) => {
        props.setPeriodo(e.target.value)
      }
      return (
          <select id="periodoSelec" className="registro__nav--select" name="select" onChange={e => atualizarLista(e)}>
            {props.lista?.map((periodo, index) => {
              return (<option key={index} value={periodo}>{periodo}</option>)
            })}
          </select>
        );
    }

组件导航

export default function RegistrosNav(props) {
  const periodos = props.lista
  const index = props.lista.indexOf(props.periodo)

  const setNav = (direcao) => {
    if(direcao){
      props.setPeriodo(periodos[index-1])
    }
    if(!direcao){
      props.setPeriodo(periodos[index+1])
    }
  }
  return <>
    <div className="registro__nav">
    <FontAwesomeIcon onClick={e => setNav(false)} className="registro__nav--icon" icon={faChevronLeft}/>
    <div>
      Período
      <RegistroNavSelect periodo={props.periodo} lista={props.lista} setPeriodo={props.setPeriodo}/>
     </div>
     <FontAwesomeIcon onClick={e => setNav(true)} className="registro__nav--icon" icon={faChevronRight}/>
    </div>
  </>;

您必须确保您的 <select> 是受控组件。因此,您应该将 value 作为属性包含在 select 元素中。我假设 setPeriodo 来自 useState 调用,元组的另一部分是 periodo。因此,您需要将 periodo 作为道具传递给 RegistroNavSelect,结果 select 行应该是:

<select id="periodoSelec" className="registro__nav--select" name="select" onChange={e => atualizarLista(e)} value={periodo}>