javascript - 使用react-router和react-addons-css-transition-group进行页面转换

标签 javascript reactjs transition react-router

我最近开始学习 React.js,现在正在尝试使用动画/过渡。我正在使用 React Router 并尝试使用 ReactCSSTransitionGroup 实现页面之间非常简单的转换。当我加载/刷新页面时它起作用,但当我通过导航链接从一个页面转到另一个页面时它不起作用。尝试使用下一个代码使页面淡入,但它不起作用:

package.json

{
  "name": "reactapp",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "dependencies": {
    "babel-core": "^6.9.1",
    "babel-preset-react": "^6.5.0",
    "babel-loader": "^6.2.4",
    "babel-preset-es2015": "^6.9.0",
    "react": "^15.1.0",
    "react-dom": "^15.1.0",
    "webpack": "^1.13.1",
    "webpack-dev-server": "^1.14.1"
  },
  "devDependencies": {},
  "scripts": {
    "start": "webpack-dev-server --inline --content-base . --history-api-fallback"
  },
  "author": "",
  "license": "ISC"
}

index.html

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>React App</title>
      <link rel="stylesheet" href="/app.css">
   </head>
   <body>
      <div id="app"></div>
      <script src="/index.js"></script>
   </body>
</html>

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, Link, browserHistory, IndexRoute  } from 'react-router'
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

class App extends React.Component {
   render() {
      return (
         <div>
            <ul>
               <Link to="/home">Home</Link>
               <Link to="/about">About</Link>
               <Link to="/contact">Contact</Link>
            </ul>
            <ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionAppearTimeout={500}>
                     {this.props.children}
            </ReactCSSTransitionGroup>

         </div>
      )
   }
}

export default App;

class Home extends React.Component {
   render() {
      return (
         <div>
            <h1>Home...</h1>
         </div>
      )
   }
}

export default Home;

class About extends React.Component {
   render() {
      return (
         <div>
            <h1>About...</h1>
         </div>
      )
   }
}

export default About;

class Contact extends React.Component {
   render() {
      return (
         <div>
            <h1>Contact...</h1>
         </div>
      )
   }
}

export default Contact;

ReactDOM.render((
   <Router history={browserHistory}>
      <Route path = "/" component = {App}>
         <IndexRoute component = {Home} />
         <Route path = "home" component = {Home} />
         <Route path = "about" component = {About} />
         <Route path = "contact" component = {Contact} />
      </Route>
   </Router>

), document.getElementById('app'))

app.css

.example-appear {
  opacity: 0.01;
}

.example-appear.example-appear-active {
  opacity: 1;
  transition: opacity .5s ease-in;
}

有什么想法可以让这项工作发挥作用吗?

谢谢!

最佳答案

https://github.com/reactjs/react-router/blob/master/examples/animations/app.js

您必须克隆组件,将子组件作为 props 传递给它,而不是仅仅渲染 this.props.children。然后 React-router 使用该键进行导航。

<ReactCSSTransitionGroup
    transitionName="example"
    transitionAppear={true}
    transitionAppearTimeout={500}
>
    {React.cloneElement(this.props.children, { key: this.props.location.pathname })}
</ReactCSSTransitionGroup>

关于javascript - 使用react-router和react-addons-css-transition-group进行页面转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992930/

相关文章:

javascript - 如何处理或最小化 jquery 中的紧耦合

javascript - onChange 在每次击键时触发

reactjs - Webpack:如何使用动态捆绑组合两个完全独立的 bundle

jquery - 单击时的CSS不透明度过渡

javascript - 如何通过添加类让 CSS 过渡在新创建的 HTML 元素上运行?

javascript - 使用 d3.nest 嵌套包含数组的数据

javascript - 如何禁止 ESLint 将项目添加到 useEffect 的观察者数组中?

javascript - 在课外访问 Prop

reactjs - React 在触发另一个组件时似乎重新渲染了错误的组件

javascript - 使用 CSS 进行页面转换