【问题标题】:Pass the whole data to the onChange in a select tag将整个数据传递给选择标记中的 onChange
【发布时间】:2022-01-25 15:22:38
【问题描述】:

在 ReactJS 中,onClick 事件在 Google Chrome 浏览器中不起作用,但在 Firefox 中可以正常工作。当我在 select 内的 option 标记中添加带有箭头功能的 onClick 事件时,它在 Google Chrome 中的任何情况下都不起作用。

<select>
   {data.map( (item) => {                            
     return(
       <>
         <option onClick={()=>alert('Test')} value={item.name} key={item.id}>{item.name}</option>
       </>
      )
   })}
</select>

我实际上需要在 option 标签内调用带有一些参数的 ES6 箭头函数

<select>
{data.map( (item) => {
  return(
     <>
      <option onClick={()=>LoadNew(item.id)} value={item.name} key={item.id}>{item.name}</option>
     </>
    )
  })}
</select>

这在 Firefox 中运行良好,但在 Google Chrome 浏览器中不起作用。知道如何解决这个问题吗?

【问题讨论】:

    标签: javascript reactjs google-chrome ecmascript-6


    【解决方案1】:

    您需要将onChange 属性传递给select 标签,然后您可以从那里访问该值。

    更新:
    如果要访问需要使用 JSON 的全部数据。

    <select
            onChange={(e) => {
              console.log(JSON.parse(e.target.value));
            }}
          >
            {data.map((item) => {
              return (
                <>
                  <option value={JSON.stringify(item)} key={item.id}>
                    {item.name}
                  </option>
                </>
              );
            })}
          </select>
    

    【讨论】:

    • 我需要发送带有箭头功能的item.id。而且item.name 也是选择标签的值。如果我在选项标签的值属性中设置item.id,那么我不会得到item.name。我怎样才能以这种方式获得item.iditem.name?这甚至可能吗?
    • 更新了我的答案,请检查。您需要使用 JSON.parse 和 JSON.stringify
    • 请选择答案并点赞:)
    • 您的解决方案可以很好地解决这个问题,我试过了,但在我的情况下,如果我这样做,我会遇到另一个问题。我从e.target.value 的函数中读取了select 标记值,因此以您的方式,该函数获取整个对象,而不仅仅是item.name,因为您使用value 属性来传递对象。我还需要在option 标签的值属性中设置item.name。所以在我的情况下它对我不起作用。但它可能对另一种情况有用。感谢您的回答。
    【解决方案2】:

    所以我想出了一个蛮力方法。因为您需要将项目的 id 传递给 LoadNew 函数

    export default function App() {
    let data = [
    { name: "Love", id: 1 },
    { name: "labs", id: 2 }
    ];
    return (
    <div className="App">
      <select
        onChange={(e) => {
          let item= data.filter((val) => val.name == e.target.value);
          LoadNew(item.id)
        }}
      >
        {data.map((item) => {
          return (
            <>
              <option value={item.name} key={item.id}>
                {item.name}
              </option>
            </>
          );
        })}
      </select>
    </div>
          );
       }
    

    您可以通过在选择标签上放置一个 onChange 事件监听器来获取选定的值。在我们将商品的 id 传递给函数之后,我们过滤数据以获取特定商品。

    【讨论】:

    • 在 React hooks 中,一个由 useState 设置的数组对象,我无法直接通过 item.id 提取 id 的值。所以我改变了数组对象 a = item.map(a =&gt; a.id) 然后提取值 a[0] 。这样,我现在解决了我的问题,但我不知道这是否正确。或者有没有更好的方法来做到这一点?无论如何,您的回答对我解决问题有很大帮助。谢谢你的回答。
    • 很好,我可以提供帮助,只是认为这是一种解决方案。如果您找到可以分享的任何其他解决方案。目前,您可以选择作为答案并点赞
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2013-03-08
    • 2023-03-31
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多