React 批量传递props

承接上文

    <script type="text/babel">
      class Person extends React.Component {
        render() {
          console.log("this", this);
          const { name, sex, age } = this.props;
          return (
            <ul>
              <li>姓名:{name}</li>
              <li>性别:{sex}</li>
              <li>年龄:{age}</li>
            </ul>
          );
        }
      }
      ReactDOM.render(
        <Person name="tom" sex="女" age="18" />,document.getElementById("test")
      );
    </script>

这里传递的值比较少,当需要传递十几个值时,或是真实项目开发中,值由后端返回时,就不好使用多组key,value实现
我们可以用扩展运算符来实现。

    <script type="text/babel">
      class Person extends React.Component {
        render() {
          console.log("this", this);
          const { name, sex, age } = this.props;
          return (
            <ul>
              <li>姓名:{name}</li>
              <li>性别:{sex}</li>
              <li>年龄:{age}</li>
            </ul>
          );
        }
      }
      const p = {name:'tom',sex:'女',age:'18'}
      ReactDOM.render(
        <Person {...p} />,document.getElementById("test")
      );
    </script>

在这里插入图片描述
不过使用时需要注意一下,扩展运算符并不能直接展开对象
在这里插入图片描述

构造字面量对象时使用展开语法
在这里插入图片描述
回过头我们发现,在react中<Person {…p} />,document.getElementById(“test”),这样子写是没有问题的,但是不能理解成复制了一个对象p(如下图所示)
在这里插入图片描述
在react中…p外层的{}代表的意思是,要在里面写js表达式,而在上图中定义的…c外层{},是提前定义好的语法结构,所以这两个花括号不是同一个意思(可以理解react中的p外层{}是当做分隔符使用),我们写的还是…p。这里就回到了上述问题,p是一个对象,展开运算符不能直接展开对象,为什么能够实现展开?是因为babel+react中可以这样允许这样实现。
但不能这样写

    <script type="text/babel">
      class Person extends React.Component {
        render() {
          console.log("this", this);
          const { name, sex, age } = this.props;
          return (
            <ul>
              <li>姓名:{name}</li>
              <li>性别:{sex}</li>
              <li>年龄:{age}</li>
            </ul>
          );
        }
      }
      const p = { name: "tom", sex: "女", age: "18" };
      console.log("p", ...p);
      ReactDOM.render(<Person {...p} />, document.getElementById("test"));
    </script>

在这里插入图片描述
在react中{…p}仅仅限于HTML标签属性中使用。
题外话,如何复制对象的时候,修改属性
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值