【发布时间】:2016-03-02 22:36:52
【问题描述】:
我目前遇到一个问题,即我的一个组件 (ComponentThree) 样式未更新,即使发送的道具和生成的样式实际上已正确更新。
我正在使用父子通信技术,我在其中公开了我的第二个组件可以触发的道具功能。然后,我的第三个组件脱离了作为道具传递给它的父级的状态。
下面是我的代码(请原谅我的代码问题,因为我不得不把它撕掉并概括一下):
class ComponentOne extends React.Component {
constructor(){
super();
this.state = {
swipePosition: 0,
};
}
handleSwipe(val, animate = false) {
this.setState({
swipePosition: val,
});
}
render() {
return <div className="componentOne">
<ComponentTwo onSwipe={this.handleSwipe.bind(this)} />;
<ComponentThree swipePosition={this.state.swipePosition} />
</div>;
}
}
class ComponentTwo extends React.Component {
handlePanEnd() {
this.props.onSwipe(percentage);
}
render() {
return <Hammer onPanEnd={this.handlePanEnd.bind(this)}>
<li>some content goes here...</li>
</Hammer>;
}
}
class ComponentThree extends React.Component {
constructor(){
super();
this.state = {
styles: {
rejected: {},
accepted: {},
},
};
}
getStyles(swipePosition) {
// do bunch of stuff i.e. for rejected:
const rejected = {
WebkitTransform: 'translate3d(-100%, 0, 0)'
}
this.setState({
styles: {
rejected,
accepted,
},
});
}
componentWillReceiveProps(nextProps) {
this.getStyles(this.props.swipePosition);
}
componentDidMount() {
this.getStyles(this.props.swipePosition);
}
render() {
return <div className='ComponentThree'>
<div style={this.state.styles.rejected}></div>
<div style={this.state.styles.accepted}></div>
</div>;
}
}
欢迎提出任何建议。
【问题讨论】:
-
在
componentWillReceiveProps中,您不会传递传入的props(nextProps),而是传递旧的 (this.props) -
仍然没有 :( 控制台在第三个组件渲染中注销,我可以看到更新的状态样式,即
console.log(this.state.styles.rejected); -
swipePosition应该做什么/包含什么?getStyles()中的任何类型的条件都没有使用它。该函数在挂载和收到新的props时将始终生成相同的状态。rejected总是新创建的,accepted总是未定义的。 -
我使用
swipePosition来指示我想要应用的转换,即它基本上是一个 tinder 式的左右滑动。根据当前的平移,我相应地设置了 transform - 我只放了一小部分rejected一个,这样你就可以看到我正在设置一个样式对象 -accepted基本相同 - 这有意义吗? -
使用 componentWillReceiveProps(nextProps) { this.getStyles(nextProps.swipePosition); }
标签: javascript reactjs styles