React.render 在 jsdom 中创建空子组件
React.render makes empty subcomponent in jsdom
我正在使用 jsdom 在节点中玩 React。当我尝试呈现包含另一个具有内容的组件的组件时,它将无法呈现子组件的内容。例如,
var React = require('react');
var SubComponent = React.createClass({
render: function() {
return React.createElement("div");
}
});
var TestComponent = React.createClass({
render: function () {
/* JSX would look like this:
<div>
<p>regular tag</p>
<SubComponent>sub component</SubComponent>
</div>
*/
return React.createElement(
"div", {},
React.createElement("p", {}, "regular tag"),
React.createElement(SubComponent, {}, "sub component")
);
}
});
global.document = require('jsdom').jsdom('<!doctype html><html><body></body></html>');
global.window = document.parentWindow;
global.navigator = window.navigator;
React.render(React.createElement(测试组件), global.document.body)
console.log(document.body.innerHTML);
这会将以下标记记录到控制台:
<div data-reactid=".zf2pciql8g">
<p data-reactid=".zf2pciql8g.0">regular tag</p>
<div data-reactid=".zf2pciql8g.1"></div>
</div>
请注意 <p>
标签有其内容,但 <SubComponent>
标签已更改为空 div。
为什么 div 的内容没有 "sub component"?我刚刚开始学习 React,所以我在这里做了一些明显愚蠢的事情吗?
当您执行 React.createElement(SubComponent, {}, "sub component")
时,您将通过 this.props.children
将 "sub component"
传递给 SubComponent
。但是,在 SubComponent
中,您没有使用 this.props.children
,只是通过 React.createElement("div")
.
渲染一个空的 div
一个简单的解决方法是将 this.props.children
传递给您在 SubComponent
的 render
方法中创建的 div:
var SubComponent = React.createClass({
render: function() {
return React.createElement("div", {}, this.props.children);
}
});
有关 this.props.children
的更多信息,请参阅 Type of the Children props。
我正在使用 jsdom 在节点中玩 React。当我尝试呈现包含另一个具有内容的组件的组件时,它将无法呈现子组件的内容。例如,
var React = require('react');
var SubComponent = React.createClass({
render: function() {
return React.createElement("div");
}
});
var TestComponent = React.createClass({
render: function () {
/* JSX would look like this:
<div>
<p>regular tag</p>
<SubComponent>sub component</SubComponent>
</div>
*/
return React.createElement(
"div", {},
React.createElement("p", {}, "regular tag"),
React.createElement(SubComponent, {}, "sub component")
);
}
});
global.document = require('jsdom').jsdom('<!doctype html><html><body></body></html>');
global.window = document.parentWindow;
global.navigator = window.navigator;
React.render(React.createElement(测试组件), global.document.body) console.log(document.body.innerHTML);
这会将以下标记记录到控制台:
<div data-reactid=".zf2pciql8g">
<p data-reactid=".zf2pciql8g.0">regular tag</p>
<div data-reactid=".zf2pciql8g.1"></div>
</div>
请注意 <p>
标签有其内容,但 <SubComponent>
标签已更改为空 div。
为什么 div 的内容没有 "sub component"?我刚刚开始学习 React,所以我在这里做了一些明显愚蠢的事情吗?
当您执行 React.createElement(SubComponent, {}, "sub component")
时,您将通过 this.props.children
将 "sub component"
传递给 SubComponent
。但是,在 SubComponent
中,您没有使用 this.props.children
,只是通过 React.createElement("div")
.
一个简单的解决方法是将 this.props.children
传递给您在 SubComponent
的 render
方法中创建的 div:
var SubComponent = React.createClass({
render: function() {
return React.createElement("div", {}, this.props.children);
}
});
有关 this.props.children
的更多信息,请参阅 Type of the Children props。