React - 组件样式不从道具更新
React - Component styles not updating from props
我目前遇到一个问题,我的一个组件 (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>;
}
}
欢迎提出任何建议。
ComponentThree
如果你只计算渲染中的样式,而不是将它们保存在状态中,会更简单。当前,您正在对 mount 和新道具到来时进行簿记,但最终结果是您拥有调用 render
时所需的样式。相反,只需在 render
中计算它们,您的大部分代码就会消失。我怀疑你的 bug 是某个地方的愚蠢错误,通过重构你最终可能会删除导致你的 bug 的代码。
最后真的很简单,完全是开发错误:)(尴尬)
在 getStyles
函数中,我做了一堆计算 - 当将它应用到样式时,我忘记将 %
放入,所以 React 只是将其视为无效样式并忽略了!
我目前遇到一个问题,我的一个组件 (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>;
}
}
欢迎提出任何建议。
ComponentThree
如果你只计算渲染中的样式,而不是将它们保存在状态中,会更简单。当前,您正在对 mount 和新道具到来时进行簿记,但最终结果是您拥有调用 render
时所需的样式。相反,只需在 render
中计算它们,您的大部分代码就会消失。我怀疑你的 bug 是某个地方的愚蠢错误,通过重构你最终可能会删除导致你的 bug 的代码。
最后真的很简单,完全是开发错误:)(尴尬)
在 getStyles
函数中,我做了一堆计算 - 当将它应用到样式时,我忘记将 %
放入,所以 React 只是将其视为无效样式并忽略了!