当前位置: 首页 > 面试题库 >

处理react.js中的骨干模型/集合更改

祖迪
2023-03-14
问题内容

在过去的几周里,我一直在与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每个请求都有其错误处理回调: 我如何在一个地方处理所有错误?