Как динамически добавлять элементы в select в React?

Не могли бы вы рассказать мне, как динамически добавлять элементы в select в реакции?

Я получаю ответ от сервера (имя, метка и т. Д.). Например, я просто имитирую свой ответ и через две секунды получаю его.

В моем примере у меня есть два поля выбора или раскрывающегося списка. Первый раскрывающийся список имеет значения "один" и "два" (которые указаны как параметры в json).

В json есть еще один вариант dependentField это означает, что поле зависит от другого поля (указанное значение зависит). В моем примере second поле зависит от первого поля.

Таким образом, значение второго поля выбора или раскрывающегося списка будет ["three", "four"] если сначала выберите поле или идентификатор раскрывающегося значения one.

Таким образом, значение второго поля выбора или раскрывающегося списка будет ["five", "six"] если сначала выберите поле или идентификатор раскрывающегося значения two.

Так что мне нужно watch значение поля, указанное в hook form

https://react-hook-form.com/get-started

Можем ли мы динамически добавлять параметры

вот код

https://codesandbox.io/s/stoic-benz-lxb8i

useEffect(() => {
    console.log("====");
    (async () => {
      var a = await FETCH_API();
      console.log("sssss");
      setState(a);
      console.log(a);
    })();
  }, []);


const getForm = () => {
    try {
      return state.map((i, index) => {
        switch (i.type) {
          case "text":
            return (
              <div key={index}>
                <label>{i.label}</label>
                <input type="text" ref={register()} name={i.name} />
              </div>
            );

          case "select":
            if (i.watch) {
              watch(i.name, null);
            }
            return (
              <div key={index}>
                <label>{i.label}</label>
                <select name={i.name} ref={register()}>
                  {i.options.map((i, idx) => {
                    return (
                      <option key={idx} value={i}>
                        {i}
                      </option>
                    );
                  })}
                  /
                </select>
              </div>
            );
          default:
            return <div>ddd</div>;
        }
      });
      return <div>ddd</div>;
    } catch (e) {}
  };

Я не хочу выполнять аркоадинг, как

useEffect(()=>{


},[‘first’]) 

можем ли мы наблюдать или добавлять useeffect динамически, чтобы отслеживать изменения динамически?

Любое обновление

1 ответ

Это простой выбор из двух. Где первый выбор зависит от секунды

import React,{useState, useEffect} from "react"

const App = () => {

  const [state,setState] = useState({
    option1:["one","two"],
    option2: []
  })

  useEffect(()=> {
    (async () => {
      var a = await FETCH_API();
      console.log("sssss");
      setState({
        ...state,
        option2: a
      });
      console.log(a);
    })();
  },[state.option1])

  return(
    <div>
      <select>
        {
          state.option1.map((i,idx)=>{
            return(
              <option key={idx} value={i}>
              {i}
              </option>
            )
          })
        }

      </select>
      <select>
        {
          state.option2.map((i,idx)=>{
            return(
              <option key={idx} value={i}>
              {i}
              </option>
            )
          })
        }

      </select>
    </div>
  )
}

export default App
Другие вопросы по тегам