好吧,所以我有一个非常有趣的问题,有条件地使用className渲染一个样式,它适用于一个表但不适用于另一个表. 我正在使用反应版本15.6.2 我映射数据并返回第一个表格行或第二个表格,如果
我正在使用反应版本15.6.2
我映射数据并返回第一个表格行或第二个表格,如果它是买或否.
if (isBuy) { return ( <tr key={i} className={( newOrder ? 'updatedOrderTr' : '' )} onClick={() => this.props.populateOrderForm(amount, price, isBuy)}> <td>{order[1].user_depth}</td> <td>{numberWithDelimiter((price * amount).toFixed(prec))}</td> <td>{amount}</td> <td>{price.toFixed(prec)}</td> </tr> ); } else { return ( <tr key={i} className={( newOrder ? 'updatedOrderTr' : '' )} onClick={() => this.props.populateOrderForm(amount, price, isBuy)}> <td>{price.toFixed(prec)}</td> <td>{amount}</td> <td>{numberWithDelimiter((price * amount).toFixed(prec))}</td> <td>{order[1].user_depth}</td> </tr> ); }
我渲染了这个组件的两个实例,它传递了一个像这样结构化的数组
[ [1, {volume: 1, price: 3}], [2, {volume: 4, price: 2}] ]
唯一的区别是一个表是卖单表,一个是买单表,其中表格单元格被反转.
买入订单行变得很好,并且样式应该正确显示(当newOrder为真时).
卖单表行只能随机工作.这是一个视频.
https://giphy.com/gifs/3o7aCPUNIy9oA46Y8g/fullscreen
请注意我是如何发送垃圾邮件以获得实际闪存的右侧.实际上代码是完全相同的,只有td的反转…
我很困惑,花了很多时间玩它.
我尝试使得应用样式的类只是一个纯实的背景而不是动画.
这是我检查的条件.其中检查订单数组当前索引与该数组的先前状态.
const newOrder = JSON.stringify(this.props.data[i]) !== JSON.stringify(this.state.previousTable[i]);
非常感谢任何帮助!
我通过检查nextProps与currentProps相比解决了这个问题,如果它们发生了变化,我会设置导致重新渲染的状态.右表(卖单)没有更新的原因是因为有买入数据和卖出数据来自套接字.几乎每次都会出现卖单(这就是它定期工作的原因).
因为我没有检查道具是否发生了变化,所以状态被多次设定,我无法看到这种风格.
componentWillReceiveProps(props) { if (this.props.data !== props.data) { this.setState({previousTable: this.props.data}); } }