javascript - es6 传播运算符如何处理对象到 Prop 的转换?

标签 javascript reactjs ecmascript-6 redux react-redux

我知道为了让 {...todo} 在 Todo 组件中工作,它必须被转换成像这样的 Prop :completed=false text="clean room" 但传播运算符是如何做到这一点的呢?当前的 {...todo} 不会被转换为 {completed:false}, {text:"clean room"} 吗?

const TodoList = ({ todos, onTodoClick }) => (
  <ul>
    {todos.map(todo =>
      <Todo
        key={todo.id}
        {...todo}
        onClick={() => onTodoClick(todo.id)}
      />
    )}
  </ul>
)

最佳答案

正如已经确定的那样,此处扩展语法的使用与 ES6 无关,它是一种 JSX 结构。

JSX 只是 React.createElement 调用的语法糖。 Prop 实际上作为对象传递给该函数。

您可以使用 Babel repl看看 JSX 是如何转换的。

没有传播 Prop :

// In
<Component foo="bar" baz="42" />

// Out
React.createElement(
  Component,
  { foo: "bar", baz: "42" }
);

使用 spread 属性:

// In
<Component foo="bar" {...xyz} baz="42" />

// Out
React.createElement(
  Component,
  Object.assign({ foo: "bar" }, xyz, { baz: "42" })
);

所以你可以看到,如果 props 包含一个 spread prop,它们会被分成多个对象并简单地合并。

关于javascript - es6 传播运算符如何处理对象到 Prop 的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39030927/

相关文章:

javascript - 用 supertest 测试二进制响应

javascript - Reactjs 中的 Canvas 手绘撤消和重做功能

javascript - 脚本标签中的 JS 对象是否安全?

javascript - 鉴于 ES2015、依赖注入(inject)和库抽象,我理想的模块在 2016 年应该是什么样子?

javascript - 为什么箭头函数可以在 ReactJS 类上使用,但不能在纯 ES6 类上使用?

javascript - 在 javascript 中从 .NET/Razor 解析本地化数字的最佳方法是什么?

c# - 是否可以在 C# MSScriptControl.ScriptControlClass 执行的 JScript 中休眠?

javascript - 如何解析 JSON 响应中的第二个 HTML anchor 元素

node.js - 如何在 React 15.6.0 上正确使用 PropTypes?

reactjs - 是否可以将 Symfony 表单组件与 React.js 一起使用?