(文档已经过时)react-router README 中文
React Router
原文: https://github.com/rpflorence/react-router/blob/master/README.md 为 React 定制的完整 routing 模块. 功能
查看 安装shnpm install react-nested-router # or bower install react-router 这个模块是用 CommonJS 模块写的,如果你是用 Browserify,Webpack,这之类的, 在 Bower 上还有一个 UMD 构建的版本,通过 用法var Route = require('react-nested-router').Route; React.renderComponent(( <Route handler={App}> <Route name="about" handler={About}/> <Route name="users" handler={Users}> <Route name="user" path="/user/:userId" handler={User}/> </Route> </Route> ),document.body); 如果 JSX 对你来说不算美味的话: jsReact.renderComponent(( Route({handler: App},Route({name: "about",handler: About}),Route({name: "users",handler: Users},Route({name: "user",path: "/user/:userId",handler: User}) ) ) ),document.body);
应用的其余部分是这样的: jsvar Link = require('react-nested-router').Link; var App = React.createClass({ render: function() { return ( <div> <ul> <li><Link to="about">About</Link></li> <li><Link to="users">Users</Link></li> <li><Link to="user" userId="123">User 123</Link></li> </ul> <this.props.activeRouteHandler/> </div> ); } }); var About = React.createClass({ render: function() { return <h2>About</h2> ; } }); var Users = React.createClass({ render: function() { return ( <div> <h2>Users</h2> <this.props.activeRouteHandler/> </div> ); } }); var User = React.createClass({ render: function() { return <div>{this.props.params.userId}</div> } }); 要更好地理解 jsrender: function() { var user = <User params={{userId: 2}}/>; var users = <User activeRouteHandler={user}/>; return <App activeRouteHandler={users}/>; } 而 router 可以帮你管理 view 的层级关系. 这个方案的好处
相关的模块
APIRoute (component)配置 component,声明应用的 routes 和 View 的层级. Props(属性)location - 这个方法用在初始化 router 时页面的导航. 可以是 "hash" 表示在 url 当中使用 hash 并监听 name - route 的名字,在 path - 在 url 当中使用的 path,支持动态生成的片段. handler - 当 route 匹配时会被渲染的 component. 子元素routes 是可以嵌套的. 当子级的 route 匹配了, 例子xml<Route handler={App}> <!-- path 被自动赋值到 name 上,因为 name 省略了 --> <Route name="about" handler={About}/> <Route name="users" handler={Users}> <!-- note the dynamic segment in the path --> <!-- 注意 path 当中的动态片段 --> <Route name="user" handler={User} path="/user/:id"/> </Route> </Route> 或者不用 JSX: jsRoute({handler: App},Route({name: 'about',Route({name: 'users',Route({name: 'user',handler: User,path: '/user/:id'}) ) ); Route Handler (用户定义的 component)传给 route 的 Props(属性)this.props.activeRouteHandler(extraProps) - 活跃的子节点的 route handler. this.props.params - 当 route 中存在形如 this.props.query - url 的 query 参数. 静态方法 (transition 的钩子)你可以在 route handlers 上定义静态方法,方法将在 route 的 transition 进行时被调用. willTransitionTo(transition,params) - 在 route 即将被渲染时调用. willTransitionFrom(transition,component) - 在 route transition 开始时调用, Transition (对象)transition.abort() - 中止 transition transition.redirect(to,params,query) - 重定向到另一个 route transition.retry() - 重试某个 transition 例子jsvar Settings = React.createClass({ statics: { willTransitionTo: function(transition,params) { return auth.isLoggedIn().then(function(loggedIn) { if (!loggedIn) return; transition.abort(); return auth.logIn({transition: transition}); // in auth module call `transition.retry()` after being logged in }); },willTransitionFrom: function(transition,component) { if (component.formHasUnsavedData())) { if (!confirm('You have unsaved information,are you sure you want to leave this page?')) { transition.abort(); } } } } //... }); Link (Component)创建一个锚点元素,链接到应用的一个 route. 当 route 匹配时自动增加 Properties(属性)to - 链接的到的 route 的名字. query - 对象,添加到 link 上的 query 参数. [param] - route 定义时传入的任何参数会被传入 link 的属性. 例子当 route 是 xml<Link to="user" userId={user.id} params={{foo: bar}}>{user.name}</Link> <!-- 根据 route 是否被激活,router 变成其中的一个 --> <a href="/users/123?foo=bar" class="active">Michael</a> <a href="#/users/123?foo=bar">Michael</a> 顶层的静态方法router 有几个顶层的方法可以用来对应用进行导航. jsvar Router = require('react-nested-router') transitionTo(routeName,[params[,query]]) - 通过程序 transition 到新的 route. jsRouter.transitionTo('user',{id: 10},{showAge: true}); Router.transitionTo('about'); replaceWith(routeName,query]]) - 通过程序把当前的 route 替换为新的 route. jsRouter.replaceWith('user',{showAge: true}); Router.replaceWith('about'); goBack() - 通过程序返回前一个 route 并从浏览器历史记录删去最近的一条记录. jsRouter.goBack(); 开发查看 CONTRIBUTING 感谢 Ember这个模块很大程度上收到 Ember.js router API 的启发. 一般来说,这是个 Ember router API 在 React 当中的一个翻译. 深深感谢 Ember 团队他们已经把最难的部分解决了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |