javascript - react 组件与箭头函数奇怪的行为

标签 javascript reactjs ecmascript-6

我正在使用这段代码关注官方的 redux 教程(它有效!)

const TodoList = ( {todos} ) => (
    <ul>
        { todos.map( todo => 
            <li key={todo.id}>{todo.name}</li>
        )}
    </ul>
)

我一直在研究语法,这也行得通:

const TodoList = ( {todos} ) => (
    <ul>
        { todos.map( todo => {
            return <li key={todo.id}>{todo.name}</li>
        })}
    </ul>
)

但这不起作用:

const TodoList = ( {todos} ) => (
    <ul>
        { todos.map( todo => {
            <li key={todo.id}>{todo.name}</li>
        })}
    </ul>
)

谁能解释它们之间的区别以及第三个失败的原因?

最佳答案

因为箭头函数

todo => {
    <li key={todo.id}>{todo.name}</li>
}

什么都不返回,你会得到一个包含undefined的数组(基于todos的长度)。例如:

const ary = [1, 2, 3].map(el => { console.log(el) })
console.log(ary) // [undefined, undefined, undefined]

你必须在 .map() 的回调中返回一些东西

如果回调仅包含 1 个表达式并立即返回,则可以省略 { } return

const foo = () => {
  return 'foo'
}

等于

const foo = () => 'foo'

现在您可以:

const TodoList = ( {todos} ) => (
    <ul>
        { todos.map( todo => (
            <li key={todo.id}>{todo.name}</li>
        ))}
    </ul>
)

( ) 也不是必须的,如果您愿意,可以省略:

const TodoList = ( {todos} ) => (
    <ul>
      { todos.map(todo => <li key={todo.id}>{todo.name}</li>) }
    </ul>
)

关于javascript - react 组件与箭头函数奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624273/

相关文章:

javascript - 扫雷算法解决方案

javascript - 等待 Promise 时如何排队或推迟函数调用

javascript - 无法在 angularjs Controller 中分配下拉选择值。

javascript - react-router 在子组件中获取 this.props.location

reactjs - 如何重命名 Apex 圆环图标签

css - 如何在不使用任何对象 webpack sass loader 的情况下按原样使用 sass 类名?

javascript - 什么会导致 JavaScript "new"关键字失败?

javascript - 使用 Raphael.js 转换为绑定(bind)框

javascript - 如何在多个 Bootstrap 选项卡上运行 .js 文件?

Javascript/React - 不重复自己的最佳方式