React 扩展运算符未知的支柱警告

如果您尝试使用不被React识别的道具作为合法的DOM属性/属性来渲染DOM元素,那么unknown-prop警告将触发。你应该确保你的DOM元素没有虚假的道具。

这个警告可能会出现几个可能的原因:

  1. 您是否使用{...this.props}cloneElement(element, this.props)?您的组件直接将其自己的道具转移到子元素(例如https://reactjs.org/docs/transferring-props.html)。将道具转移到儿童组件时,应确保您不会意外地转发旨在由父组件解释的道具。
  2. 您在本地DOM节点上使用非标准DOM属性,可能表示自定义数据。如果您尝试将自定义数据附加到标准DOM元素,请考虑使用MDN中描述的自定义数据属性。
  3. React尚未识别您指定的属性。这可能会在未来版本的React中修复。但是,React目前会去除所有未知属性,因此在您的React应用程序中指定它们不会导致它们被渲染。
  4. 您正在使用不带大写字母的React组件。React将其解释为DOM标记,因为React JSX转换使用大写与小写惯例来区分用户定义的组件和DOM标记


为了解决这个问题,复合组件应该“消耗”用于复合组件的任何道具,而不是用于子组件。例:

不好:意外的layout道具被转发到div标签。

function MyDiv(props) {
  if (props.layout === ‘horizontal‘) {
    // BAD! Because you know for sure "layout" is not a prop that <div> understands.
    return <div {...props} style={getHorizontalStyle()} />
  } else {
    // BAD! Because you know for sure "layout" is not a prop that <div> understands.
    return <div {...props} style={getVerticalStyle()} />
  }
}

好:扩展运算符可以用来从道具上拉出变量,并把剩下的道具放到一个变量中。

function MyDiv(props) {
  const { layout, ...rest } = props
  if (layout === ‘horizontal‘) {
    return <div {...rest} style={getHorizontalStyle()} />
  } else {
    return <div {...rest} style={getVerticalStyle()} />
  }
}

好:您还可以将道具分配给新对象,并从新对象中删除正在使用的按键。确保不要从原始this.props对象中删除道具,因为该对象应该被认为是不可变的。

function MyDiv(props) {

  const divProps = Object.assign({}, props);
  delete divProps.layout;

  if (props.layout === ‘horizontal‘) {
    return <div {...divProps} style={getHorizontalStyle()} />
  } else {
    return <div {...divProps} style={getVerticalStyle()} />
  }
}

原文地址:https://www.cnblogs.com/passkey/p/10212471.html

时间: 2024-10-31 14:54:24

React 扩展运算符未知的支柱警告的相关文章

ES6系列_4之扩展运算符和rest运算符

运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数问题 以前我们编程是传递的参数一般是确定,否则将会报错或者异常,如下: function test(a,b,c,d) { console.log(a) console.log(b) console.log(c) console.log(d) console.log(e)//e is not defi

扩展运算符(...)的用途

1.合并数组一直以来,有很多方法合并数组,但是扩展运算符给了我们全新的方法去实现合并数组: arr1.push(...arr2) // 把arr2合并到arr1的后面arr1.unshift(...arr2) //把arr2合并到arr1的前面如果你想在数组内合并数组,你可以像下面这样做: var arr1 = ['two', 'three'];var arr2 = ['one', ...arr1, 'four', 'five'];2.复制数组复制数组是我们常常要做的工作,在过去,我们会使用Ar

day46homework常量字符串拼接结构赋值扩展运算符for-of循环map函数默认值

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>01定义常量.html</title> <!--常量--> <script> //常量:1.一旦定义 不能更改 const PI = 3.14;  // console.log(PI); // PI = 3.1415; error 

... 扩展运算符

1  含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. [javascript] view plain copy console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [<div>, <div>, <div>]

关于扩展运算符中i++和++i,以及基本类型和引用类型的综合应用

首先说一下扩展运算符中的i++和++i i++和++i在单独使用的时候是一样的. var i=1; //i++; //console.log(i);//2 ++i console.log(i);//2 但是当它参与其他运算是就会发生改变 var i=1;var b=i++ + i++ + i++;//2+3+4 console.log(i);//4 console.log(b)//9 所以总结一下关于i++和++i,即i++是在加号前面,所以向赋值在加1,而++i是先运算再赋值 下面这个案例会涉

ES6 rest参数和扩展运算符

rest参数 ES6引入了rest参数(形式为“…变量名”).其中rest参数搭配的变量是一个数组可以使用数组的一切操作. 例: function rest(...values){ let sum=0; for(var val of values){ sum+=val; } return sum; } add(1,2,3)//6 值得注意的是rest参数之后不能再有其他参数(只能是最后一个参数)否则会报错. 例: function rest(a,...b,c){ }//报错 函数的length属

妙用ES6解构和扩展运算符让你的代码更优雅

Javascript ES6/ES2015尘埃落定,其中许多特性其实是为了简化代码.解构运算符,扩展运算符,和rest运算符就是其中很好的特性,它们可以通过减少赋值语句的使用,或者减少通过下标访问数组或对象的方式,使代码更加简洁优雅,可读性更佳.现在各浏览器及node.js都加快了部署ES6的步伐.ES6的学习正当其时. 解构 解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值 数组解构赋值: var arr = ['this is

ES6扩展运算符的用途

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性. 扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用. 看这个例子: console.log(...[3, 4, 5]) 结果: 3 4 5 调用其实就是: console.log(3, 4, 5) 合并数组 可以使用扩展运算符将多个数组进行合并. let arr1 = [1, 2, 3] let a

(...)ES6三点扩展运算符

扩展运算符将一个数组转为用逗号分隔的参数序列 console.log(...[a, b, c]) // a b c