绑定到getInitialState?

时间:2015-12-29 08:19:55

标签: javascript ruby-on-rails reactjs

是否可以绑定到getInitialState()

BidLists = React.createClass({
  getInitialState: function(s) {
      return{
        filteredID: this.props.data,
        currentData: s
      }
    },
  renderBidContent: function(s) {
    return(
      <div>{s.support_title}</div>
    );
  },
  render: function() {
    var cards = this.props.data.slice(0,25).map( (s, i) => {
      return (
        <div>
          {this.getInitialState.bind(this,s)} // is this even possible?
        </div>
        );
     });
     var currentData = this.state.currentData;
     return(
       <div>{this.renderBidContent(currentData)}</div>
     );
  }
});
module.exports = BidLists;

我得到了:

  

无法读取属性&#39; support_title&#39;未定义的

我似乎没有正确绑定s。有帮助吗?我使用的是React v0.14

背后的原因:

renderBidContent()中会有另一个函数循环。该循环将针对s.id进行测试。我可以在BidList的render()中实现这一点,但输出是两次,我不希望这样。

我尝试做某事like this但没有点击方法。

1 个答案:

答案 0 :(得分:0)

你不能这样做,这不是绑定如何工作。

也许你正在寻找类似的东西

BidLists = React.createClass({
  getInitialState: function(s) {
      return{
        filteredID: this.props.data
      }
    },
  renderBidContent: function(s) {
    return(
      <div>{s.support_title}</div>
    );
  },
  render: function() {
    return this.props.data.slice(0,25).map( (s, i) => {
      return <div>{this.renderBidContent(s)}</div>
    });
  }
});

绑定如何工作

绑定实际上并不绑定旧函数。它创建一个新函数并将上下文或变量绑定到它。绑定的工作方式类似于currying。

考虑这个功能

function multiply(x, y){
    return x * y
}

现在说我想使用上面的函数创建一个multiplyTwo函数(我们也可以创建自己的函数但是假装乘法是一个非常复杂的函数)。

方法1,currying / closure。

function multiplyAny(num) {
    return function(y){
        return multiply(num, y);
    }
}

var multiplyTwo = multiplyAny(2);
multiplyTwo(5); //this should give you 10

方法2绑定

var multiplyTwo = multiply.bind(null, 2);
multiplyTwo(5); //this should give you 10

bind就像一种特殊的咖喱,并创建了一个已经设置了一些变量的新函数。第一个变量是上下文(a.k.a this keyword)