传递一个道具,当传递下来时计算其值

时间:2018-05-03 01:38:10

标签: javascript reactjs

我目前正在尝试使用isMyOffer prop返回一个Component。

return (
  <div>
    <ul>
      {Object.keys(offers).map(key => (
        <Offer
        key={key}
        index={key}
        details={offers[key]}
        account={this.props.account}
        isMyOffer={this.props.checkIfMyOffer(key, this.props.account.myOffers)}
        addToMyOffers={this.props.addToMyOffers}
        />
      ))}
    </ul>
  </div>
)

我的函数checkIfMyOffer()应该在创建的第一个商品上返回true,而对其他商品返回false,但是对于所有商品都返回false。

checkIfMyOffer = (offerKey, myOffers) => {
    if(myOffers){
        Object.keys(myOffers).forEach(key => {
            if(offerKey === myOffers[key]) {
                console.log("return " + offerKey)
                return true
            }
        })
    }
    return false
};

console.log表示我正在进入条件循环但我的商品组件仍然具有 false 作为其isMyOffer值。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

if(myOffers) {
  if(Object.values(myOffers).find(x => x === offerKey)) {
    return true;
  }
}

return false;

此方法使用Array.prototype.find()来查看密钥是否在Object.values()数组中。

或者可以使用.includes()作为OP声明:

if(myOffers) {
  if(Object.values(myOffers).includes(offerKey)) {
    return true;
  }
}

return false;

答案 1 :(得分:1)

您可以按如下方式更新checkIfMyOffer

checkIfMyOffer = (offerKey, myOffers) => {
    return myOffers && Object.keys(myOffers).some(key => myOffers[key] === offerKey);

或者你没有事件需要它,只能更新你的React.Component:

<Offer
   key={key}
   index={key}
   details={offers[key]}
   account={this.props.account}
   sMyOffer={myOffers && Object.keys(myOffers).some(offerKey => myOffers[offerKey] === key)}
   addToMyOffers={this.props.addToMyOffers}
/>

答案 2 :(得分:0)

我在这里看到了几件事:

1-您的checkIfMyOffer函数将始终返回false因为您没有从if语句中返回任何内容。您只是使用forEach

遍历数组

2-我看到你试图在forEach上使用return。 ForEach不返回值,它只是遍历数组并在每个元素中执行任何操作。 See more here

如果您想将新数组元素返回到新数组中,我建议您使用.map。这将返回一个真或假的数组

3-您要返回.map的结果,您需要实际返回整个操作。如果您只是将[{1}}替换为forEach,那么它会一直持续到您在函数结束时遇到.map为止。

在您的情况下,您希望在对象中包含某个元素时返回true,因此您的代码应如下所示:

return false

不确定这是否是您要找的。但希望它有所帮助。

编辑:很明显,阵列并不是您想要的。我不好误会!如果您只想知道checkIfMyOffer = (offerKey, myOffers) => { if(myOffers){ return Object.keys(myOffers).map(key => { if(offerKey === myOffers[key]) { console.log("return " + offerKey) return true } }) } return false }; 是否在offerKey,您可以使用myOffers运算符(see more here)。基本上,如果在对象中找到键,则返回true,否则返回false。所以在这种情况下,我们想要更新in,如下所示:

checkIfMyOffer