如何附加现有的<IMG>元素(HTMLImageElement)到一个Facebook React.js组件
How do I attach an existing <IMG> element (HTMLImageElement) to a Facebook React.js component?
我有一个用data-uri生成的IMG DOM元素。我怎么能把它附加到React.js的"虚拟DOM"?
当我尝试以下操作时:
myImgComponent = React.createClass({
getInitialState: function() {
slowGenerateImage((function(_this) {
return function(img) { /* img is an HTMLImageElement */
return _this.setState({
image: img
});
};
})(this));
return {image: null};
},
render: function() {
return div(
{},
this.state.image /* image is a raw HTMLImageElement */
);
}
});
我得到以下错误:
Invariant Violation: traverseAllChildren(...): Encountered an invalid child; DOM elements are not valid children of React components.
你可以只渲染<img src={this.state.img.src}/>
吗?或者甚至让slowGenerateImage
生成src
,而不是创建一个元素,然后你可以直接传递它
这似乎是一件不好的事情,但是…
用法:
return <DomNode node={someDomNode} />;
注意:下面是过时的,正如@sookie指出的那样。在较新的版本中,您使用ReactDOM。
JSBin: http://jsbin.com/hepeboke/2/edit?js输出
代码:var DomNode = React.createClass({
componentDidMount: function(){
this.updateNode(this.props.node);
},
componentWillRecieveProps: function(nextProps){
if (nextProps.node !== this.props.node) {
this.updateNode(nextProps.node);
}
},
componentWillUnmount: function(){
this.updateNode(null);
},
updateNode: function(node){
var myNode = this.getDOMNode();
for (var i=0; i<myNode.children.length; i++) {
myNode.removeChild(myNode.children[i]);
}
if (node) {
myNode.appendChild(node);
}
},
render: function(){
return <div />
}
});
注意:这确实插入了一个额外的div,我不知道是否有办法,但我认为没有。
相关文章:
- 如何创建带有插槽的vue js组件预加载程序
- 如何在react js中将值从一个组件发送到另一个组件
- 如何在react js中移动第二个组件
- React js更改状态不会更新组件
- ember-js组件初始化不同的函数
- 复选框保持React JS中各组件的状态
- 如何在cycle js中从JSON数组创建组件
- Vue.js获取组件中的一个元素
- Ember.js(v2.4.5)组件不是't错过第二个动作
- 将自定义脚本加载到Vue.js组件中
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- 使用react.js渲染其他组件内部的组件
- React.js不区分同一类的两个组件
- Ember.js:未在组件'中渲染的模型的计算属性;关于变更的参考
- 如何忽略node.js中其他文件或组件所需的文件
- React.js简单组件组成问题
- 在多个react.js组件中呈现json数据
- 以最封装的方式封装/封装ScalaJS react js组件(react stick)
- 需要来自单个JS文件的多个子模块与节点/组件.js
- 在组件.js内加载客户 sapui5 库