客户端非ES6浏览器上的JSX传播属性

Jak*_*son 1 javascript reactjs react-jsx

ReactJS JSX具有一种可以轻松地向组件添加许多属性的方法:

var props = {};
props.foo = x;
props.bar = y;
var component = <Component {...props} />;
Run Code Online (Sandbox Code Playgroud)

这些称为传播属性。

https://facebook.github.io/react/docs/jsx-spread.html#spread-attributes

...表示法称为ES6中使用的Spread运算符。如果您要使用Babel等在服务器端渲染所有内容,那么这很容易使用,但是如果您想在客户端的浏览器中创建和渲染组件,则如何在不使用浏览器的浏览器中使用扩展属性支持ES6 ...Spread运算符?

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility

Jor*_*ing 5

尽管语法相似,但是JSX扩展运算符与ES6扩展运算符并不相同,使用前者不需要后者。尽管JSX编译器可以将带有JSX扩展运算符的JSX标签转换为使用ES6扩展运算符的JavaScript,但实际上,他们只是将其转换为ES5代码。要了解Babel如何做到这一点,请在Babel网站上进行尝试。本质上,这是:

var obj = { className: 'foo' };
var el = <Component id='bar' {...obj}/>;
Run Code Online (Sandbox Code Playgroud)

...变成这样:

var obj = { className: 'foo' };
var el = React.createElement(Component,
           Object.assign({ id: 'bar' }, obj));
Run Code Online (Sandbox Code Playgroud)

(根据属性的位置略有变化。)

无需ES6传播算子。

换句话说,如果您正在使用翻译器将JSX转换为JavaScript,并且由于没有浏览器直接支持JSX,那么您不必担心已翻译的代码具有散布运算符,因为您不需要使用ES6扩展运算符,您就使用了JSX扩展运算符,并且将其转换为浏览器可以理解的内容。