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

警告:列表中的每个孩子都应该有一个唯一的“键”道具。反应js

吴浩博
2023-03-14

我对如何创建一个简单的todo应用程序的反应和探索方式还不熟悉。我当前收到错误“警告:列表中的每个孩子都应该有一个唯一的“键”道具。”一切似乎都很好,但我一定是做错了什么。

class App extends Component {

  constructor(props) {
    super(props)

    this.state={
      list: [],
      item:{
        body: '',
        id: ''
      }
    }
  }

  handleInput(e) {
    this.setState ({
      item:{
        body: e.target.value,
        key: Date.now()
      }
    })
  }

  addItem(e) {
    e.preventDefault();
    const newItem = this.state.item
    const list = [...this.state.list]
    list.push(newItem)
    console.log(list)
    this.setState ({
      list,
      item:{
        body: '',
        id: ''
      }
    })
  }

  render() {
    return (
      <div className="App">
        <h1>To Do List</h1>
        <form>
          <input
          type='text'
          placeholder='enter a new Todo'
          value={this.state.item.body}
          onChange={this.handleInput.bind(this)}
          >
          
          </input>
          <button onClick={this.addItem.bind(this)}>
            submit
          </button>
        </form>
        <br/>
        
          {this.state.list.map(item => {
            return (
              <li>{item.body}</li>
            
            )
          })}
        
      </div>
    );
  }
}

export default App;

如果有人能帮上忙,那就br太好了/解释为什么会发生这个错误,那就太好了。

共有3个答案

濮阳鸿卓
2023-03-14

要给数组中的每个元素一个唯一的标识,需要一个键。键帮助React识别哪些项目已更改(添加/删除/重新排序)。

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
  <li key={number.toString()}>
    {number}
  </li>
);

请记住,如果使用不稳定的密钥,react将导致性能下降和意外行为。

请快速查看官方文档以了解更多说明:https://reactjs.org/docs/lists-and-keys.html

秦新立
2023-03-14

您应该给每一行一个唯一的特定id。如果您不确定id是唯一的,您也可以在箭头函数中使用索引旁边的项目,如以下代码

{ this.state.list.map((item, index) => {
  return (
    <li key={index}>{item.body}</li>
  )
}))}
曹鸿风
2023-03-14

简短回答:给出你的

同时检查您的handleInput。你是说id:Date。现在()

  handleInput(e) {
    this.setState ({
      item:{
        body: e.target.value,
        key: Date.now() // <--- id: Date.now()
      }
    })
  }

说明:见https://stackoverflow.com/a/43892905

 类似资料:
  • 在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js

  • 问题内容: 我正在使用Google Books API构建应用,并且似乎正在向列表中的每个孩子传递唯一键,但是错误不会消失。我一定在做错事,但不确定。 请注意,在返回const books之后,我有一个console.log(book.id),它将在控制台中显示所有10个唯一的id键。但是,当我尝试使用key = {book.id}将其传递给该组件的子组件时,会出现此错误。 问题答案: 在需要去最

  • 我调用一个APIendpoint,将其数据保存到一个状态,然后呈现它。它显示在浏览器中,但控制台上有一个警告:。 我的: 我不明白在render()中该将关键道具放在哪里。这是我的代码片段: 不使用钥匙道具会带来什么改进?我被这些

  • 我正在使用GoogleBooksAPI构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不知道是什么。 注意,在const books中返回后,我有一个控制台。日志(book.id),它将在控制台中显示所有10个唯一的id键。但是当我试图使用key={book.id}将它传递给这个组件的子组件时,我得到了这个错误。

  • 所以我想渲染数组,但它一直在说,警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键,我的数组包含三个元素,它甚至没有正确渲染第三个数组,按钮没有甚至因为某种原因第三李的工作。 更新:我从firebase获得的数据如下所示: 此代码将选择每个数据的标题 当我将鼠标悬停在“fikka-fikka”上时,“fikka-fikka”的按钮甚至不起作用。在ed sheeran和一个方向上,

  • 我写了一个BlackJack游戏,但是在我从卡片API中查询API后,卡片从未显示在屏幕上。我有控制台记录了玩家甲板和交易甲板,它有卡片数据,但没有显示。 错误如下:index.js:1375警告:列表中的每个子级都应该有一个唯一的“键”道具。 检查的渲染方法。参见https://reactjs.org/link/warning-keys了解更多信息。在黑杰克(http://localhost:3