javascript - 我在将主干集合传递到 react 组件时遇到问题

标签 javascript backbone.js reactjs

当我只是将其作为 props 传递给 React 组件时,我的主干集合集合不会填充。我尝试首先使用 componentDidmount 和 componentWillMount 获取集合,但这仍然没有填充集合。如果我通过设置指向 DecksIndex 的窗口变量来测试代码,并在控制台工具中调用 getInstance() 然后获取 ,数据加载良好。我的代码如下:

 //router.js
var DeckComponent = require("./views/deck.jsx")
var DecksIndex = React.createFactory(require("./views/decks.jsx"))
var decksCollection = require("./component/collections/decks.js");

module.exports = Backbone.Router.extend({

    initialize: function(){
        this.rootEl = document.getElementById('container');
    },

    routes: {
        "":"index",
        "decks/:id":"deckShow"
    },

    index: function(){

        var decks = new DecksIndex({decks: decksCollection.getInstance()});
        this._swapView(decks)
        console.log("hooray!")
    },

    deckShow: function(id){
        //var deck = Flashcards.Collections.decks.getOrFetch(id);
        var showDeck = new DeckComponent();
        this._swapView(showDeck);
    },

    _swapView: function(view){
        if (this.currentView) {
            React.unmountComponentAtNode(this.rootEl);
        }
        this.currentView = view
        React.render(view, document.getElementById('container'));
    }   

});


//decks.js

var deck = require('../models/deck.js')
var decks = Backbone.Collection.extend({
  url: "/api/decks",
  model: deck,
  getOrFetch: function(id){
        var model = this.get(id);
        var that = this;
        if (model) {
            model.fetch();
        }else{
            model = new deck({id: id})
            model.fetch({
                success: function(){
                    that.add(model)
                }
            })
        }
        return model;
    },

    parse: function (data) {
        debugger;
        return data.objects
    },

});

decks.getInstance = _.memoize(function () {
  return new decks();
});

module.exports = decks;

//decks.jsx
var DecksList = React.createClass({

    render: function() {

            return (
              <div className="deck-list">
              {
                this.props.decks.map(function (deck) {
                    var title = deck.name
                    debugger;
                  return (
                    <div key={deck.id} className="note-summary">
                      {title}
                    </div>
                  );
                })
              }
              </div>
            );
      }
});

module.exports = DecksList;

最佳答案

这是管理状态的容器组件有意义的情况的示例。如果 DecksList 有一个容器,可以在安装时检索集合,并且仅在数据可用时才呈现 DecksList,则可能会解决问题。这是一篇关于该模式的好文章:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0

关于javascript - 我在将主干集合传递到 react 组件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656743/

相关文章:

javascript - 避免渲染中的绑定(bind),同时维护父组件的上下文

javascript - clearInterval 没有在 useEffect 中停止我的计数器

css - 在 Backbone Marionette 中使用 css 或区域管理 View

javascript - 预期相应的 JSX 关闭错误

javascript - 主干触发事件变量

javascript - 我想在单击复选框时传递一个 id 参数

javascript - 如何将表情符号字符插入 JS 脚本

php - AJAX 联系表单无法发布数据

backbone.js - Chain Backbone.js 收集方法

javascript - backbone.queryparams.js 无法在 IE 上运行