在过去的几周里,我一直在与Facebook框架React.js和Backbone一起工作,但是我仍然不确定是否有什么最合适的方法来重新渲染React组件。已作为道具传递。
目前我要做的是在componenentWillMount
集合上设置change/add/remove
侦听器,并在触发时设置状态:
componentWillMount: function(){
var myCollection = this.props.myCollection;
var updateState = function(){
this.setState({myCollection: myCollection.models});
}
myCollections.on("add remove", updateState, this);
updateState();
}
render: function(){
var listItems = this.state.myCollection.map(function(item){
return <li>{item.get("someAttr")}</li>;
});
return <ul>{listItems}</ul>;
}
我已经看到了将模型克隆到状态的示例:
var updateState = function () {
this.setState({ myCollection: _.clone(this.myCollection.models) });
};
我也看到了变体,其中props中的模型/集合直接在渲染中使用,而不是使用状态,然后在集合/模型发生更改时调用forceUpdate,从而导致组件重新渲染
componentWillMount: function(){
var myCollection = this.props.myCollection;
myCollections.on("add remove", this.forceUpdate, this);
}
render: function(){
var listItems = this.props.myCollection.map(function(item){
return <li>{item.get("someAttr")}</li>;
});
return <ul>{listItems}</ul>;
}
不同方法有什么优点和缺点?有没有办法做到这就是 React的方式 ?
您可以使用基于此BackboneMixin的mixin来自动绑定和取消绑定监听器,而不是手动绑定事件监听器:
https://github.com/facebook/react/blob/1be9a9e/examples/todomvc-
backbone/js/app.js#L148-L171
然后你只要写
var List = React.createClass({
mixins: [BackboneMixin],
getBackboneModels: function() {
return [this.props.myCollection];
},
render: function(){
var listItems = this.props.myCollection.map(function(item){
return <li>{item.get("someAttr")}</li>;
});
return <ul>{listItems}</ul>;
}
});
集合中的任何更改都会重新渲染该组件。您只需要将BackboneMixin放在顶层组件上,所有后代都会在同一时间自动重新呈现。
我有一个收藏模型的典型结构。 在视图中,每个对象都有一个“编辑”按钮,该按钮应该取消激活其他对象的所有“编辑”按钮。 我想知道这样做的最佳做法是什么。谢谢!!
我用脊梁骨。js 我试图从服务器获取我的数据,但它不起作用 (服务器发送json对象) 我搜索了但没有回应 我的代码哪里不正确?
问题内容: 我正在尝试使用JAXB解组以下XML: 我已经使用XJC生成了所有类。如果要访问Composers集合,则必须执行以下操作: 有什么办法可以代替我吗? 我理解需要一个从XML派生的Composers对象,但是在使用Java进行交易时,拥有一个用于存储集合的中间POJO似乎有点多余。 我的XSD是: 问题答案: 该 @XmlElementWrapper 插件不正是你想要的。
1.【强制】 关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要重写equals,就必须重写hashCode。 2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的 对象必须重写这两个方法。 3) 如果自定义对象做为Map的键,那么必须重写hashCode和equals。 说明: String 重写了 hashCode 和 e
问题内容: 我有一个带有参数的方法,该参数可以为NULL。我想将输入的本地副本作为结束。现在,我的代码如下所示: 有没有更清洁的方法可以做到这一点?如果是一个简单的参数,我可以做类似的事情,但是我不确定是否有类似处理集合的事情。 问题答案: 我不明白为什么您不能使用: 您可以使用静态导入保存某些类型的输入,如果您要这样做的话:
但是,使用retrofit每个请求都有其错误处理回调: 我如何在一个地方处理所有错误?