反应;映射数组后没有任何渲染

reactjs; after mapping an array nothing renders

我有一个输入,在用户插入文本后我想在 button-group 中的按钮中显示每个单词。我将句子拆分并将其映射为 returns

<input .....><button onClick=....>

所以我在输入中插入文本,点击按钮后 text.split(" ") 到这里为止一切正常。但在按钮组部分什么也没显示

<div className="btn-group" role="group" aria-label="...">
   {this.mapArrayToButtons()}
</div>

   mapArrayToButtons(){
        this.state.textArr.map((word)=>{
            console.log('the word: ',word);
            return(<button key={word} type="button" className="btn btn-default" value={word}>{word}</button>);});
    }

我逐字查看控制台日志 textArr.length 次。但是没有按钮呈现,浏览器中也没有任何显示。

您需要 return 从您的函数中获取一个值,如下所示:

   mapArrayToButtons(){
        return this.state.textArr.map((word)=>{
            return(<button key={word} type="button" className="btn btn-default" value={word}>{word}</button>);});
    }

希望对您有所帮助!

试试这个

mapArrayToButtons(){
    const buttons = this.state.textArr.map((word)=>{
        console.log('the word: ',word);
        return(<button key={word} type="button" className="btn btn-default" value={word}>{word}</button>);});
    return buttons;

}

您需要了解/注意两件事:

1 - 如果你有一个 jsx 数组,例如:

let arrayOfJsx = [ <div>Hello</div>, <div>World</div> ] 

当您将此数组放入渲染方法时,例如:

render(){

   let arrayOfJsx = [ <div>Hello</div>, <div>World</div> ] 

   return (
      <div> { arrayOfJsx } </div>
   )
}

等同于

render(){

       return (
          <div>
               <div>Hello</div>
               <div>World</div> 
          </div>
       )
}

2 - Array.prototype.forEach 和 Array.prototype.map 之间的差异:

当你使用 forEach 时,你从传递给 forEach 的函数中 return 什么并不重要,重要的是要知道当你 return 一个值时函数停止执行,这对 forEach 来说并不特别。但是当我们说你 return 不重要时,我们想指出你 return 对 Array.prototype.map 的重要性:

当您想要根据您 return 为数组中的每个项目创建数组时,您需要使用 map。

示例:

let a = [ 1,2,3 ]
let b = a.map( item => item + 1 )
// b is now [ 2,3,4 ]

总而言之,您想在您的示例中执行的操作是从 map 创建一个数组并将其放入您的 render 方法中。如果你不知道这两点,你就不会理解它是如何工作的。

注意:您需要为地图函数中 return 的每个项目传递一个唯一键。例如:

let a = [ 1,2,3 ]
let arrayOfJsx = a.map( item => <div key={item} > I am { item } </div> )

这样 react 就不会报错