一个lib如果AddRecipe有RecipeBox没有关系
然后你可以使用像这样的观察者模式,使用一个小型图书馆像microevent:
例如在一些模块调用events.js:
var MicroEvent = require('./microevent.js');
module.exports = new Ticker();
在RecipeBox的文件:
var ticker = require('./events.js');
var RecipeBox = React.createClass({
componentDidMount: function() {
this.addingHandler =() => this.setState({ adding: false });
ticker.bind('adding', this.addingHandler);
},
componentWillUnmount: function() {
ticker.unbind('adding', this.addingHandler);
}
});
在AddRecipe的文件:
var React = require('react');
var RecipeBox = require('./RecipeBox.jsx');
var ticker = require('./events.js');
var AddRecipe = React.createClass({
onAdd: function() {
ticker.trigger('adding');
},
render: function() {
return (
<div className="popUp">
<button className = "btn btn-danger" onClick={this.onAdd}>X</button>
<h2>Add a Recipe</h2>
<form>
<h3>Name</h3>
<input></input>
<h3>Ingredients</h3>
<textarea></textarea>
<button type="submit" className="btn btn-success">Submit</button>
</form>
</div>
);
}
});
module.exports = AddRecipe;
如果RecipeBox是AddRecipe
的孩子你不应该试图改变RecipeBox的状态,这种方式。如果RecipeBox
是AddRecipe
一个子组件,那么你应该通过一个道具到它,而不是:
var React = require('react');
var RecipeBox = require('./RecipeBox.jsx');
var AddRecipe = React.createClass({
handleClick: function() {
// you should only change your own state, see how
// we set 'adding' on RecipeBox on one of the last
// lines of render instead
this.setState({
adding: false
});
},
render: function() {
return (
<div className="popUp">
<button className = "btn btn-danger" onClick={this.handleClick}>X</button>
<h2>Add a Recipe</h2>
<form>
<h3>Name</h3>
<input></input>
<h3>Ingredients</h3>
<textarea></textarea>
<button type="submit" className="btn btn-success">Submit</button>
</form>
<RecipeBox adding={this.state.adding}/>
</div>
);
}
});
module.exports = AddRecipe;
如果AddRecipe是RecipeBox的孩子
如果RecipeBox
是AddRecipe
而不是父母,那么你应该传播adding: false
高达RecipeBox
像这样:
var RecipeBox = React.createClass({
render: function() {
return <AddRecipe onAdd={this.onAdd.bind(this}/>;
}
onAdd: function() {
this.setState({ adding: false });
}
});
var React = require('react');
var RecipeBox = require('./RecipeBox.jsx');
var AddRecipe = React.createClass({
render: function() {
return (
<div className="popUp">
<button className = "btn btn-danger" onClick={this.props.onAdd}>X</button>
<h2>Add a Recipe</h2>
<form>
<h3>Name</h3>
<input></input>
<h3>Ingredients</h3>
<textarea></textarea>
<button type="submit" className="btn btn-success">Submit</button>
</form>
</div>
);
}
});
module.exports = AddRecipe;
也看到这篇文章的https://www.ctheu。COM/2015/02/12 /如何对通信之间反应的组分/ –