首页 > 技术文章 > React Router 4.0中文快速入门

yuri2016 2017-10-19 16:21 原文

 1 import React from 'react'
 2 import {
 3   BrowserRouter as Router,
 4   Route,  
 5   Link
 6 } from 'react-router-dom'
 7 
 8 const Home = () => (
 9   <div>
10     <h2>Home</h2>
11   </div>
12 )
13 
14 const About = (props) => { 
15      let goto=function(){
16        console.log(props);
17        let { history } = props; 
18        history.push('/topics');  //编程式跳转,注意使用prop来读取history
19      }
20      return (
21       <div>
22         <h2><button onClick={goto}>about</button></h2>    
23       </div>
24       )
25   
26  }
27 
28 const Topic = ({ match }) => (
29   <div>
30     <h3>{match.params.topicId}</h3>
31   </div>
32 )
33 
34 const Topics = ({ match }) => (
35   <div>
36     <h2>Topics</h2>
37     <ul>
38       <li>
39         <Link to={`${match.url}/rendering`}>
40           Rendering with React:          
41         </Link>
42       </li>
43       <li>
44         <Link to={`${match.url}/components`}>
45           Components
46         </Link>
47       </li>
48       <li>
49         <Link to={`${match.url}/props-v-state`}>
50           Props v. State
51         </Link>
52       </li>
53     </ul>
54     
55     <Route path={`${match.url}/:topicId`} component={Topic}/>
56     <Route exact path={match.url} render={() => (
57       <h3>Please select a topic.</h3>      
58     )}/>
59   </div>
60 )
61 
62 const BasicExample = ({ match }) => (
63   <Router>    //跳由容器
64     <div>
65       <ul>
66         <li><Link to="/">Home</Link></li>
67         <li><Link to="/about">About</Link></li>
68         <li><Link to="/topics">Topics</Link></li>
69 
70         <li><Link to="/query/user?id=123&name=minooo">query1</Link></li>
71         <li><Link to={{pathname: '/query/user', search: '?id=456&name=minooo'}}>query2</Link></li>
72       </ul>
73 
74 
75      
76       <hr/>
77    
78       <Route exact path="/" component={Home}/>   //表示点击Link里的to就自动把组件渲染 <Route>位置这里 exact表示精确匹配
79       <Route path="/about" component={About}/>
80       <Route path="/topics" component={Topics}/>
81 
82       <Route path='/query/user' render={({match, location}) => (   //render他component一样的用法,不过render不用再次渲染,比较高效 
83         <div>
84           <p><About></About></p>
85           <p>query</p>
86           <p>match:{JSON.stringify(match)}</p>
87           <p>location:{JSON.stringify(location)}</p>
88           <p>id:{new URLSearchParams(location.search).get('id')}</p>
89           <p>name:{new URLSearchParams(location.search).get('name')}</p>
90         </div>
91       )} />
92 
93     </div>
94   </Router>
95 )
96 export default BasicExample

 

推荐阅读