【问题标题】:How to dynamically render information in javascript mapping function如何在javascript映射函数中动态呈现信息
【发布时间】:2021-06-01 15:26:43
【问题描述】:

所以我有一个有趣的问题。我有一个 JavaScript 表(它位于一个 React JS 组件中)。我正在使用映射函数来循环遍历存储在 props 中的数组。数组中每个元素的值用于为选择下拉菜单创建选项标签。请看以下代码:

<table className="addNewTransactionTable">
  <tr>
    <th>
      <label>#</label>
    </th>
    <th>
      <label>Account</label>
    </th>
    <th>
      <label>Description</label>
    </th>
    <th>
      <label>Debit</label>
    </th>
    <th>
      <label>Credit</label>
    </th>
    <th>
      <label>Name</label>
    </th>
  </tr>
  {rows.map((item) => (
    <tr>
      <td>
        <input type="text" placeholder={item}></input>
      </td>
      <td>
        <select name="accountName" value={this.state.accountName} onChange={this.onChangeAccount}>
          <option>--Please Select--</option>
          {this.props.accountArray.map((index) => (
            <option>{index.name}</option>
          ))}
        </select>
      </td>
      <td>
        <input type="text" placeholder="Description"></input>
      </td>
      <td>
        <input type="text" placeholder="Debit"></input>
      </td>
      <td>
        <input type="text" placeholder="Credit"></input>
      </td>
      <td>
        <input type="text" placeholder="Name"></input>
      </td>
    </tr>
  ))}
</table>

这是创建一行输入值,具体取决于用户选择的行数。请参阅以下图片以供参考: 第一个映射函数表示用户选择的行数,第二个映射函数表示每个下拉菜单的所有选项(这是生成的行中的一个字段)。我的问题是下拉菜单。当我在其中一行中选择一个选项时,它会更改所有行的下拉菜单中的选择。这是因为 value 属性指向同一个状态值。有没有办法可以为映射函数的每个循环动态更改状态?我的一个想法是使this.state.accountName 成为一个数组,并在每个循环中更改它指向的元素。但是,我对映射功能不是很熟悉。为了创建动态状态,这是否可能?如果没有,还有其他方法可以做到这一点吗?

【问题讨论】:

  • 我可能会创建一个下拉组件,因此每个组件都可以管理自己的状态,而不是尝试在父级中完成所有操作。
  • 也请分享您的状态部分。您当前如何管理状态。
  • @Nick 这是一个非常好的主意...不完全确定为什么这个想法从未出现在我的脑海中。谢谢!!!

标签: javascript arrays reactjs loops mapping


【解决方案1】:

非常简单的解决方案,只需为每个选项提供 key={}

 this.props.accountArray.map((item, index)=> <option key={index}>{item.name}</option>)) }

在 onAccountChange 方法中,你可以这样做

onAccountChange = (event,) => {
  let value = event.target.value;
let selectedIndex = event.target.options.selectedIndex;
  this.setState({ ...state, type[selectedIndex]: value)}
}

做这样的事情要么把它保存在一个对象中

【讨论】:

  • 为什么会这样?假设这里的问题是因为他每次进行选择时都在设置父组件的account 状态,并且每个下拉菜单都使用此状态来呈现一个值。
  • 此解决方案不起作用。这并不能解决我的状态问题。
  • @LukeSharon 我的解决方案不起作用,因为此代码存在多个问题。您正在使用受控元素,您必须相应地管理您的状态。当你不使用键时,React 认为每个元素都是相同的。
  • 他的问题与React中的key无关,是React内部的更新机制。
  • 这是我在原始问题旁边提到的与错误代码相关的错误。尽管这是您的愿望,但您可能会更有经验。谢谢,我不是来和人争论的
猜你喜欢
  • 2020-02-16
  • 2019-12-09
  • 2020-03-10
  • 2020-02-25
  • 2021-07-24
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
相关资源
最近更新 更多