反应数组的对象更改顺序的更改值

Posted

技术标签:

【中文标题】反应数组的对象更改顺序的更改值【英文标题】:React changing value of object change order of array 【发布时间】:2019-07-16 15:42:22 【问题描述】:

我对 React 有点陌生,我试图弄清楚如何改变我的对象的状态。但是,当我更改输入字段中的状态时,该字段将在底部重新呈现。

如何将我的输入字段与第一次呈现时保持在同一个位置。

class App extends Component 
    state = 
        persons: [
            id: 0,
            name: ''
        ,
            id: 1,
            name: ''
        ]
    
    
    changePersonNameHandler = event => 
        const id = parseInt(event.target.id);
        const newPersonName = event.target.value;

        this.setState(
            persons: [...this.state.persons.filter(i => i.id !== id),
                
                    id,
                        name: newPersonName,
                
            ]
        )
    
    
    render () 
        const persons = this.state;
        
        return (
          <div>
            <ul>
              persons.map((i, index)  => (
                  <li key=i.id>
                      <label>Name: </label>
                      <input id=i.id
                           value=i.name
                           onChangethis.changePersonNameHandler/>
                  </li>
                  )
              )
            </ul>
          </div>
        )
    

【问题讨论】:

【参考方案1】:

filter 删除一个项目,你失去它的位置。要修改项目并保留其在数组中的位置,请使用map。 此外,最好不要依赖this.state 来获得setState 的新值。你应该改用setState(oldState =&gt; newState)

changePersonNameHandler = event => 
    const id = parseInt(event.target.id);
    const newPersonName = event.target.value;

    this.setState(old => 
        const persons = old.persons.map(
            person => person.id !== id ? person : id, name: newPersonName
        );
        return persons;
    )

【讨论】:

【参考方案2】:

每次进行更改时,将编辑后的人放在数组的末尾在您的 handleChange 方法中。

只需在 setState 中反转已编辑的和现有的,就可以了。

this.setState(
  persons: [
      id,
      name: newPersonName,
    , 
    ...this.state.persons.filter(i => i.id !== id)
    ]
  )

在您提供的代码中,onChange 后面缺少一个 = 符号,但我猜在您的本地代码中没问题。

【讨论】:

以上是关于反应数组的对象更改顺序的更改值的主要内容,如果未能解决你的问题,请参考以下文章

使用 textInput 和函数组件在本机反应中更改数组对象值

重新排序单元格后如何更改获取结果控制器数组中对象的顺序

如何使用 MongoDB 更改数组的顺序?

当我使用 Number() 时,JavaScript 数组映射更改元素的顺序

javascript:更改所有键的值顺序

为啥更改数组的顺序会导致超出时间限制?