【问题标题】:How to add items in select dynamically in react?如何在反应中动态添加选择中的项目?
【发布时间】:2020-02-17 11:48:11
【问题描述】:

你能告诉我如何在选择中动态添加项目吗?

我正在收到来自服务器的响应(名称、标签等)。例如,我只是模拟了我的响应,两秒钟后我获取了它。

在我的示例中,我有两个选择框或下拉菜单。第一个下拉菜单的值为“one”和“two”(在 json 中作为选项给出)。

在 json 中还有一个选项 dependentField 这意味着该字段依赖于另一个字段(提到的值是依赖的)。在我的示例中 second 字段依赖于第一个字段。

因此,如果第一个选择框或下拉值 id one,则第二个选择或下拉字段的值将是 ["three", "four"]

因此,如果第一个选择框或下拉值 id two,则第二个选择或下拉字段的值将是 ["five", "six"]

所以我需要watchhook 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来动态观察变化吗?

任何更新

【问题讨论】:

标签: javascript reactjs react-hook-form hook-form


【解决方案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

【讨论】:

  • 没用的解决方案
  • 这只是一个示例,可能无法在沙箱中运行,因为您的 api 获取服务器将无法访问互联网
猜你喜欢
  • 2018-09-14
  • 2019-12-31
  • 2022-06-10
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多