觸發React渲染循環的唯一方法是更新組件的狀態(或調用根「ReactDOM.render()」)。
在你的情況,我想你可以在你的模態組件的父組件添加本地狀態,能夠從「外部」(這裏我用了一個全球eventEmitter實例)更新此狀態:
var ParentComponent = React.createClass({
getInitialState: function() {
return {isOpen: this.props.isOpen || false};
},
componentDidMount: function() {
window.eventEmitter.addListener('openModal', this.onOpenModal);
window.eventEmitter.addListener('closeModal', this.onCloseModal);
},
componentWillReceiveProps: function(nextProps) {
this.setState({isOpen: nextProps.isOpen});
},
componentWillUnmount: function() {
window.eventEmitter.removeListener('openModal', this.onOpenModal);
window.eventEmitter.removeListener('closeModal', this.onCloseModal);
},
onOpenModal: function() {
this.setState({isOpen: true});
},
onCloseModal: function() {
this.setState({isOpen: false});
},
render: function() {
return (
<Modal isOpen={this.state.isOpen} />
);
},
});
請注意,這裏只需要本地狀態,因爲您想從「外部」更新它。此狀態也從prop「isOpen」更新,以便在應用程序的React部分內正常工作。但是在「React-only」應用程序中,「isOpen」道具就足夠了(不需要本地狀態)。
@Damien有沒有在我提出的解決方案中不清楚的東西?我在這裏幫忙。 –