我试图打印反应组件的道具,但收到错误.请帮忙:
片段:
- <!-- DOCTYPE HTML -->
- <html>
- <head>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.min.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.min.js"></script>
- <script src="http://fb. me/JSXTransformer-0.12.1.js"></script>
- <!-- gap above is intended as else stackOverflow not allowing to post -->
- </head>
- <body>
- <div id="div1"></div>
- <script type="text/jsx">
- //A component
- var George = React.createClass({
- render: function(){
- return (
- <div> Hello Dear!</div>
- <div>{this.props.color}</div>
- );
- }
- });
- ReactDOM.render(<George color="blue"/>,document.getElementById('div1'));
- </script>
- </body>
- </html>
我期待“亲爱的你好!”然后下一行“蓝色”.但是,我收到了这个错误.
错误:
解决方法
反应v16及更高版本
从React v16开始,React组件可以返回一个数组.这在v16之前是不可能的.
这样做很简单:
- return ([ // <-- note the array notation
- <div key={0}> Hello Dear!</div>,<div key={1}>{this.props.color}</div>
- ]);
请注意,您需要为数组的每个元素声明一个键.根据官方消息来源,在React的未来版本中可能不需要这样做,但现在还没有.另外,不要忘记将数组中的每个元素分开,就像通常使用数组一样.
反应v15.6及更早版本
React Components只能返回一个表达式,但是您尝试返回两个< div>元素.
不要忘记render()函数就是一个函数.函数总是包含许多参数,并且始终只返回一个值(除非无效).
这很容易忘记,但你在编写JSX而不是HTML. JSX只是javascript的语法糖.因此,一个元素将被翻译为:
- React.createElement('div',null,'Hello Dear!');
这给出了一个React元素,您可以从render()函数返回,但不能单独返回两个元素.相反,你将它们包装在另一个具有这些div作为子元素的元素中.
Caveat:
Components must return a single root element. This is why we added a
<div>
to contain all the<Welcome />
elements.
尝试将这些组件包装在另一个组件中,以便只返回一个:
- //A component
- var George = React.createClass({
- render: function(){
- return (
- <div>
- <div> Hello Dear!</div>
- <div>{this.props.color}</div>
- </div>
- );
- }
- });
- ReactDOM.render(<George color="blue"/>,document.getElementById('div1'));