Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React.js&;[…](扩展)语法_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript React.js&;[…](扩展)语法

Javascript React.js&;[…](扩展)语法,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,根据第页中的示例: 我们有以下项目: const Todo = ({ onClick, completed, text }) => ( <li onClick={onClick} style={{ textDecoration: completed ? 'line-through' : 'none' }} > {text} </li> ) Todo.propTypes = { onClick: PropT

根据第页中的示例:

我们有以下项目:

const Todo = ({ onClick, completed, text }) => (
  <li
    onClick={onClick}
    style={{
      textDecoration: completed ? 'line-through' : 'none'
    }}
  >
    {text}
  </li>
)

Todo.propTypes = {
  onClick: PropTypes.func.isRequired,
  completed: PropTypes.bool.isRequired,
  text: PropTypes.string.isRequired
}
const Todo=({onClick,completed,text})=>(
  • {text}
  • ) Todo.propTypes={ onClick:PropTypes.func.isRequired, 已完成:PropTypes.bool.isRequired, text:PropTypes.string.isRequired }
    此外,我们还有:

    const TodoList = ({ todos, onTodoClick }) => (
      <ul>
        {todos.map((todo, index) => (
          <Todo key={index} {...todo} onClick={() => onTodoClick(index)} />
        ))}
      </ul>
    )
    
    consttodolist=({todos,onTodoClick})=>(
    
      {todo.map((todo,index)=>( onTodoClick(索引)}/> ))}
    )
    有人能告诉我上面代码的{…todo}是什么吗

    我知道。。。运算符是一种扩展语法,用作[…todo,newTodoItem](将新todo项连接到旧todo列表)。 但是,在上面的示例中,todo项不是数组,它似乎生成了一个对象。对我来说,{……todo}等于{todo}


    另外,在组件上分配了什么类型的属性?

    …todo用于将道具传递给todo组件。在Todo proptypes中,您可以看到有两种变量类型的PROP。所以操作员将其传播(传递)到Todo组件的道具上

    …Todo用于将道具传递给Todo组件。在Todo proptypes中,您可以看到有两种变量类型的PROP。所以操作员将其传播(传递)到Todo组件的道具上。该
    ..
    还可用于传播对象,而不仅仅是数组。比如说,

    // Using rest syntax here
    let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; 
    x; // 1
    y; // 2
    z; // { a: 3, b: 4 }
    
    // Using spread here
    let n = { x, y, ...z };
    n; // { x: 1, y: 2, a: 3, b: 4 }
    
    在上述情况下,
    todos
    是一个包含键
    completed
    text
    的对象数组。而不是像这样手动传递道具-

    const TodoList = ({ todos, onTodoClick }) => (
      <ul>
        {todos.map((todo, index) => (
          <Todo key={index} completed={todo.completed} text={todo.text} onClick={() => onTodoClick(index)} />
        ))}
      </ul>
    )
    
    consttodolist=({todos,onTodoClick})=>(
    
      {todo.map((todo,index)=>( onTodoClick(索引)}/> ))}
    )

    我们使用扩展语法添加键值对作为道具。你可以把它看作是句法上的糖

    也可以使用
    来传播对象,而不仅仅是阵列。比如说,

    // Using rest syntax here
    let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; 
    x; // 1
    y; // 2
    z; // { a: 3, b: 4 }
    
    // Using spread here
    let n = { x, y, ...z };
    n; // { x: 1, y: 2, a: 3, b: 4 }
    
    const obj = {a: 1, b: 2, c: 3};
    
    在上述情况下,
    todos
    是一个包含键
    completed
    text
    的对象数组。而不是像这样手动传递道具-

    const TodoList = ({ todos, onTodoClick }) => (
      <ul>
        {todos.map((todo, index) => (
          <Todo key={index} completed={todo.completed} text={todo.text} onClick={() => onTodoClick(index)} />
        ))}
      </ul>
    )
    
    consttodolist=({todos,onTodoClick})=>(
    
      {todo.map((todo,index)=>( onTodoClick(索引)}/> ))}
    )
    我们使用扩展语法添加键值对作为道具。你可以把它看作是句法上的糖

    const obj = {a: 1, b: 2, c: 3};
    
    相同。所以您可以使用
    spread
    操作符
    从对象或数组中取出元素

    外部反应,如果
    const test={a:1,b:2}
    ,那么
    const x={test}//es6特性
    类似于
    const x={test:test}
    。这与
    constx={test:{a:1,b:2}}

    其中,
    在React中创建错误,因为在
    MyComponent
    中,可用于访问传递的
    obj
    的道具的名称是什么?。没有。因此出现了错误

    function MyComponent(props) {
     // What is props.? to access obj
    }
    
    
    所以你用一个有名字的道具

    <MyComponent x={obj} />
    
    function MyComponent(props) {
     // props.x has obj
     // props.x = obj
     console.log(props.x);
     return <div />
    }
    
    
    
    功能MyComponent(道具){
    //props.x有obj
    //props.x=obj
    console.log(props.x);
    返回
    }
    
    但是,spread操作符会自动为道具命名,并将对象键和值作为对象的值,如回答开头所示

    正如您在问题中所说,
    const newTodos=[…todos,newItem]
    使用从
    todos
    展开的旧todo创建一个新数组,并添加一个额外的
    newItem
    。如果您没有传播
    todos
    ,它将创建
    newTodos=[[todo1,todo2],newItem]

    相同。所以您可以使用
    spread
    操作符
    从对象或数组中取出元素

    外部反应,如果
    const test={a:1,b:2}
    ,那么
    const x={test}//es6特性
    类似于
    const x={test:test}
    。这与
    constx={test:{a:1,b:2}}

    其中,
    在React中创建错误,因为在
    MyComponent
    中,可用于访问传递的
    obj
    的道具的名称是什么?。没有。因此出现了错误

    function MyComponent(props) {
     // What is props.? to access obj
    }
    
    
    所以你用一个有名字的道具

    <MyComponent x={obj} />
    
    function MyComponent(props) {
     // props.x has obj
     // props.x = obj
     console.log(props.x);
     return <div />
    }
    
    
    
    功能MyComponent(道具){
    //props.x有obj
    //props.x=obj
    console.log(props.x);
    返回
    }
    
    但是,spread操作符会自动为道具命名,并将对象键和值作为对象的值,如回答开头所示


    正如您在问题中所说,
    const newTodos=[…todos,newItem]
    使用从
    todos
    展开的旧todo创建一个新数组,并添加一个额外的
    newItem
    。如果您没有扩展
    todos
    ,它将创建
    newTodos=[[todo1,todo2],newItem]

    扩展语法不仅仅适用于数组,请参见示例。“分配了什么类型的属性”-无论对象中有什么类型,这就是重点。请参阅示例和大多数反应入门教程。扩展语法不仅仅适用于数组,请参阅示例。“分配了什么类型的属性”-无论对象中有什么类型,这就是重点。请参阅例如和大多数介绍如何反应教程。{todo}不会做同样的事情吗?不会。{todo}将
    todo
    的值作为一个整体使用。排列在对象(或数组)内获取单个值。当您这样做时,
    prop
    也引用了
    todo
    引用的对象。我猜这就像将对象的所有属性分散到单个对象一样。例如,在你的例子中,…z类似于{a},{b}。对吗?@ekalyvio真的没有理由猜测——答案是告诉你的,而且有文档记录:)一个{todo}不会做同样的事情吗?不。{todo}是使用
    todo
    的值作为一个整体。排列在对象(或数组)内获取单个值。当y