【问题标题】:Losing animation after creating a component创建组件后丢失动画
【发布时间】:2019-11-05 06:33:42
【问题描述】:

我想使用在“Material UI”中创建的“Tabs”组件。

“材质 UI”标签演示:https://material-ui.com/components/tabs/

render() {
  <div>
    <Tabs
      value={this.state.value}
      onChange={this.handleChange}
    >
      <Tab label="First label" />
      <Tab label="Second label" />
    </Tabs>
  </div>
 }


 handleChange = () => {
   this.setState({
     value: !this.state.value
   })
 }

当我使用上面的代码时,一切都很好,当我点击第二个或第一个标签时,我可以看到改变标签位置的漂亮动画。

但是当我想创建一个新组件时:

const NewTabs = (props) => {
  return (
    <div>
      <Tabs
        value={props.value}
        onChange={props.handleChange}
      >  
        <Tab label={props.firstLabel} />
        <Tab label={props.secondLabel} />
      </Tabs>
    </div>
  )
}

export default NewTabs

并传递如下数据:

render() {
  <div>
    <NewTabs 
      value={this.state.value}
      handleChange={this.handleChange}
      firstLabel= "First test label"
      secondLabel = "Second test label"
     />
  </div>
}

handleChange = () => {
   this.setState({
     value: !this.state.value
   })
 }

然后一切正常,但是改变选项卡位置的动画不可见。

为什么会发生这种情况,如果我想使用新创建的组件,如何才能看到动画?

【问题讨论】:

    标签: javascript css reactjs animation material-ui


    【解决方案1】:

    我认为这是因为状态保存在父级中,并且每次状态更改时都会导致完全重新渲染,因此您不会看到动画。

    您可以在NewTabs 中拥有状态,而不是从父级传递它?

    class NewTabs extends React.Component{
    
       handleChange = () => {
          this.setState({
            value: !this.state.value
          })
        }
    
      render(){
       return (
        <div>
          <Tabs
            value={state.value}
            onChange={this.handleChange}
          >  
            <Tab label={props.firstLabel} />
            <Tab label={props.secondLabel} />
          </Tabs>
        </div>
    
       )
      }
    }
    
    class App extends React.Component{
      render() {
        <div>
          <NewTabs 
            firstLabel= "First test label"
            secondLabel = "Second test label"
           />
        </div> 
      }
    }
    

    【讨论】:

    • 我想过,但由于一些不同的事情,我必须将这种状态保留在父级中。那么也许你会有不同的想法?
    • 你试过给Tab元素一个唯一的ID吗?
    • 它没有帮助。同样的结果
    • 这听起来与此处的类似问题有关:stackoverflow.com/questions/59775893/…。尽管如此,这是由 withStyles 方法引起的。如果需要 useStyles 或在您提供的用例中,仍不清楚如何解决。
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 2023-03-19
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多