一個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 /如何對通信之間反應的組分/ –