我在react.js上相当新,所以非常感谢任何帮助。
我有这个:http://jsfiddle.net/rzjyhf91/
其中我制作了2个组件:图像和按钮。
目标是通过单击按钮删除图像,我使用unmountComponentAtNode
,但它不起作用:
var App = React.createClass({
render: function() {
return (
<div><MyImage /><RemoveImageButton /></div>
);
}
});
var MyImage = React.createClass({
render: function() {
return (
<img id="kitten" src={'http://placekitten.com/g/200/300'} />
);
}
});
var RemoveImageButton = React.createClass ({
render: function() {
return (
<button onClick={this.handleClick}>remove image</button>
)
},
handleClick: function(){
React.unmountComponentAtNode(document.getElementById('kitten'));
}
});
React.render(<App />, document.body);
如何从其他组件中删除反应组件?
答案 0 :(得分:36)
好吧,您似乎应该重新考虑如何处理显示控件。 React是关于隔离组件的,因此,您不应该卸载由父组件安装的组件。相反,你应该使用通过props
向下传递的回调来完成类似的事情。
您的实际实施将取决于您的使用案例,但有效示例的更新版本位于:http://jsfiddle.net/nt99zzmp/1/
var App = React.createClass({
render: function() {
var img = this.state.showImage ? <MyImage /> : '';
return (
<div>{img}<RemoveImageButton clickHandler={this.removeImage} /></div>
);
},
getInitialState: function() {
return {
showImage: true
};
},
removeImage: function() {
this.setState({ showImage: false });
}
});
var MyImage = React.createClass({
render: function() {
return (
<img id="kitten" src={'http://placekitten.com/g/200/300'} />
);
}
});
var RemoveImageButton = React.createClass ({
render: function() {
return (
<button onClick={this.props.clickHandler}>remove image</button>
)
}
});
React.render(<App />, document.body);
答案 1 :(得分:4)
基本上删除组件在 React 中没有意义,你可能仍在考虑jQuery的方式,基本上在所有现代和新的JavaScript库(包括React)中,你应该使用{{来管理你的组件1}}或state
来处理这些事情,删除元素或组件不是在React或Angular中做这些事情的好方法。
例如,在这种情况下你可以有一个布尔值,如果它是真的,显示你的图像,否则隐藏它,甚至在你的组件中返回一个不同的元素。
所以在这种情况下,你有一个不同的组件取决于route
或props
...这样的东西:
state
答案 2 :(得分:1)
在此示例中,如果设置this.state.render = false
,则该组件将从DOM中删除:
render() {
const { render } = this.state;
if (render === false) return null;
return (<p>I am here as long as render isn't false</p>);
}