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 只是将其视为无效样式并忽略了!