React:按下按钮后如何显示映射数组?

Posted

技术标签:

【中文标题】React:按下按钮后如何显示映射数组?【英文标题】:React: How to display mapped array after button press? 【发布时间】:2021-05-11 14:08:55 【问题描述】:

我是新来的反应和努力让它发挥作用。我可以显示一个映射数组,但我正在尝试更新数组,映射它,然后显示它。不知道如何让映射数组在更新后显示?

也尝试将 mappedItems 添加到我的函数中,但这似乎并没有解决问题。 TIA。

import React,  Component  from 'react';

const itemsList = ['item1','item2'];

class RecieveInput extends React.Component 
    constructor()
        super();
        this.state = 
            list: itemsList
        
    

    render()
        const pressedEnter = event => 
            if (event.key === 'Enter') 
            this.state.list.push(event.target.value);
            console.log(this.state.list);
            
          
        
        const mappedItemsList = this.state.list.map( (listItem, i) => <li>this.state.list[i]</li> )
     
        return(
            <div>
                <input 
                type ="text" 
                id="textInput"
                placeholder="Enter Item Here"
                onKeyPress=pressedEnter
                />
                <ol className='ol'>mappedItemsList</ol>
             </div>
        )
    
  

export default RecieveInput

enter image description here

【问题讨论】:

你不应该直接改变状态this.state.list.push(event.target.value);。这应该使用提供的this.setStatethis.setState( list: [...list, event.target.value ]); 来完成。 React 使用this.setState 来了解状态何时更新,并且类组件的shouldComponentUpdate 方法仅对引用进行浅比较,因此如果您在设置状态时不创建新数组,React 不会将其视为更改. 【参考方案1】:

问题

应该在组件中声明pressedEnter 回调,而不是render 函数。它也不应该通过推入状态数组来改变状态对象。

解决方案

pressedEnter 处理程序移动到组件中并使用this.setState 将更新排入队列。您需要浅拷贝现有状态并将新元素附加到其中,以便您的 list 状态是一个新的数组引用。

const pressedEnter = event => 
  const  value  = event.target;
  if (event.key === 'Enter') 
    this.setState(prevState => (
      list: prevState.list.concat(value), // or [...prevState.list, value]
    ));
  
  

【讨论】:

以上是关于React:按下按钮后如何显示映射数组?的主要内容,如果未能解决你的问题,请参考以下文章

React:从按钮 onclick 传递映射数据以显示在另一个组件上

PHP-在按下按钮后显示数组中的一个值

React - 登录提交按钮以呈现新页面

React / React Native:如何映射数组并在卡片上显示数据

按下按钮后如何动画显示 UIPickerView?

按下按钮后如何显示 24 小时计数器