javascript - 在 React 中使用 map 创建组件

标签 javascript reactjs ecmascript-6

我有这段返回组件的代码:

const Test = ({places}) => (
  <div>
    {places.map(place => (
      <div className="location" key={place.slug}>
        <div className="photo" style={ { backgroundImage: "url(" + place.src + ")" } }></div>
        <h2>{place.name}</h2>
      </div>
    ))}
  </div>
);

但我对 ( 感到困惑和 {括号。我实际上是在尝试摆脱外部 <div>标签,但当我使用时它似乎不起作用:

const Test = ({places}) => (
  {places.map(place => (
    <div className="location" key={place.slug}>
      <div className="photo" style={ { backgroundImage: "url(" + place.src + ")" } }></div>
      <h2>{place.name}</h2>
    </div>
  ))}
);

最佳答案

您需要使用那个 div原因是您正在使用 map 动态创建元素和 map返回一个数组,我们不能返回多个元素,因此您需要将它们包装在一个 div 中。

一个 React 组件不能返回多个元素,但是一个 JSX 表达式可以有多个子元素,所以如果你想让一个组件渲染多个东西,你可以将它包装在一个 div 中

不要忘记它是一个函数式组件,函数总是接受多个参数并总是只返回一个值。

更新:

如果你想做一些计算或者想在函数式组件中定义变量,那么可以这样写组件:

const Test = ({places}) => {   //use {
   let a = 1, b = [1,2,3,4];
   b.forEach(el => console.log(el));

   return(  //use return to return the html elements
      <div>
          hello world!!!
          //other elements
          ......
      </div>
   )
};

关于javascript - 在 React 中使用 map 创建组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856159/

相关文章:

javascript - Marionette 嵌套 CompositeView 在 CompositeView 事件触发/冒泡中

javascript - 使用 forEach 循环迭代时忽略 JSON 对象内的未定义属性

javascript - 解构函数参数子属性

javascript - NavigationBar 的 routeMapper 不是函数

javascript - 是否可以使用 ES6 模块导入 .css 文件?

javascript - webpack - 具有相同结构但目录不同的多个条目和输出?

javascript - 每个键必须是一些字符串;得到未定义的 Protractor

javascript - React,这在 render() 和 componentDidMount() 中未定义

reactjs - 如何在 React 组件中定位 DOM 元素,或者应该避免一起定位 DOM 元素?

javascript - 从数组中删除多个对象并返回更新后的数组