当前位置: 首页 > 知识库问答 >
问题:

React JSX Select DefaultValue未生效

石正奇
2023-03-14

我一直在查看React中的表单元素,并检查了文档(https://reactjs.org/docs/forms.html#the-选择标记)并回答stackoverflow问题,例如(如何在react select和react JSX中设置默认值:在selected上选择selected

我没有创建这样的选择组件。我有一个标题组件,当我渲染标题时,我在其中有一个select元素。select元素是通过Ajax调用填充的,这可能就是没有设置默认值的原因。

我的代码如下:

useEffect(() => {
  // do ajax call and set currenclyList
});
return (
  <header className="row block plain center">
    <div>
      <h1>Shopping Cart</h1>
    </div>
    <div>
      <select
        className="dropdown"
        onChange={handleChange}
        defaultValue="USDGBP"
      >
        {Object.keys(currencyList).map((element) => {
          return (
            <option
              key={element}
              value={element}
              data-price={currencyList[element]}
            >
              {element}
            </option>
          );
        })}
      </select>
    </div>
  </header>
);

我已经设置了defaultValue="USDGBP",因为我知道下拉列表最终会被这个和其他几个列表填充。但是当元素被呈现时,它总是被设置为列表中的第一项。

如何强制此select元素查找USDGBP元素并将其设置为默认值?

共有1个答案

王亮
2023-03-14

使用valueprop而不是defaultValue

function App() {
  const currencyList = { GBPUSD: 16.45, USDGBP: 15.74, EURGBP: 12.45 };
  const [selected, setSelected] = React.useState("USDGBP");

  const handleChange = (event) => {
    setSelected(event.target.value);
  };
  return (
    <header className="row block plain center">
      <div>
        <h1>Shopping Cart</h1>
      </div>
      <div>
        <select className="dropdown" onChange={handleChange} value={selected}>
          {Object.keys(currencyList).map((element) => {
            return (
              <option
                value={element}
                key={element}
                data-price={currencyList[element]}
              >
                {element}
              </option>
            );
          })}
        </select>
      </div>
    </header>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));
<div id="root"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
 类似资料:
  • 我是JMeter的新手。我相信我已经成功安装了它,并且正在运行脚本记录器设置(http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf)。当我启动用于拦截浏览器请求的JMeter代理服务器时,应该在jeter/bin文件夹中生成一个名为ApacheJMeterTemporaryRootCA.crt的文件。它不是。所以,我无法

  • 我正在遵循这些设置Apache Bigtop的指导,以最终支持我运行Oozie。我尝试使用Bigtop,因为Oozie网站建议如果我想在Hadoop2+上运行我的Oozie安装,就使用Bigtop。

  • 无论我尝试了什么,Avro都不会在代码中为字段生成UUID类。 版本:1.8.2 我试图用这样的模式生成UUID: 这是来自Avro项目测试类的类:,简而言之,这是Avro用来测试其代码功能的模式示例,我希望它能正常工作。 我这样运行,从我的方案中获取java代码: java-jaravro-tools-1.8.2.jar编译模式my_scheme.avsc。 java-jaravro-tools

  • 要想搞明云原生的未来,首先我们要弄明白云原生是什么。CNCF给出的定义是: 容器化 微服务 容器可以动态调度 我认为云原生实际上是一种理念或者说是方法论,它包括如下四个方面: 容器化:作为应用包装的载体 持续交付:利用容器的轻便的特性,构建持续集成和持续发布的流水线 DevOps:开发与运维之间的协同,上升到一种文化的层次,能够让应用快速的部署和发布 微服务:这是应用开发的一种理念,将单体应用拆分

  • 从我的终端运行时,它只生成以下APK。请告诉我如何从android Studio获得默认的未签名apk。我尝试为带有空密钥库的unsigned创建单独的buildType,但没有任何用处。

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id