makefile檔案_建立 makefile 檔案編譯程式
阿新 • • 發佈:2020-12-18
目錄
0.react-router腦圖
等我學完再做
1.編寫路由效果
1.編寫路由元件
2.在父路由元件中指定
路由連結<NavLink>或者<Link>
路由<Route>
js傳參要用特殊單引號``
2.專案結構
3.原始碼效果
index.js
import React from 'react' import ReactDOM from 'react-dom' import {BrowserRouter, HashRouter} from 'react-router-dom' import App from './components/app' // BrowserRouter來管理整個APP ReactDOM.render( ( <BrowserRouter> <App/> </BrowserRouter> ), document.getElementById('root') )
about.jsx
import React,{Component} from 'react'
export default class About extends Component {
render() {
return (
<div>About元件內容</div>
)
}
}
new.jsx
import React,{Component} from 'react' export default class News extends Component { state = { newsArr: ['news001', 'news002', 'news003'] } render () { return ( <div> <ul> { this.state.newsArr.map((news, index) => <li key={index}>{news}</li>) } </ul> </div> ) } }
home.jsx
import React,{Component} from 'react' import {Switch, NavLink,Route, Redirect} from 'react-router-dom' import News from './news' import Message from './message' export default class Home extends Component{ render(){ return ( <div> Home元件內容 <div> {/*導航路由連結*/} <ul className="nav nav-tabs"> <li> <NavLink to='/home/news'>News</NavLink> </li> <li> <NavLink to="/home/message">Message</NavLink> </li> </ul> {/*可切換的路由元件*/} <Switch> <Route path='/home/news' component={News} /> <Route path='/home/message' component={Message} /> <Redirect to='/home/news'/> </Switch> </div> </div> ) } }
message.jsx
import React,{Component} from 'react'
import {NavLink,Link, Route} from 'react-router-dom'
import MessageDetail from "./message-detail"
export default class Message extends Component {
state = {
messages: []
}
componentDidMount () {
// 模擬傳送ajax請求非同步獲取資料
setTimeout(() => {
const data = [
{id: 1, title: 'Message001'},
{id: 3, title: 'Message003'},
{id: 6, title: 'Message006'},
]
//更新狀態
this.setState({
messages: data
})
}, 1000)
}
ShowDetail = (id) => {
this.props.history.push(`/home/message/messagedetail/${id}`)
}
ShowDetail2 = (id) => {
this.props.history.replace(`/home/message/messagedetail/${id}`)
}
back = () => {
this.props.history.goBack()
}
forward = () => {
this.props.history.goForward()
}
reqPage = () =>{
//通過js進行頁面跳轉
window.location = 'http://www.baidu.com'
}
render () {
const path = this.props.match.path
return (
<div>
<ul>
{
this.state.messages.map((m, index) => {
return (
<li key={index}>
{/*非路由連結,會發送請求,重新整理頁面*/}
{/*<a href={`/home/message/messagedetail/${m.id}`}>{m.title}</a>*/}
{/*路由連結,不會發送請求,不重新整理頁面*/}
<NavLink to={`/home/message/messagedetail/${m.id}`}>{m.title}</NavLink>
}
<button onClick={() => this.ShowDetail(m.id)}>檢視詳情(push)</button>
<button onClick={() => this.ShowDetail2(m.id)}>檢視詳情(replace)</button>
</li>
)
})
}
</ul>
<p>
<button onClick={this.back}>返回</button>
<button onClick={this.forward}>前進</button>
</p>
<p>
<button onClick={this.reqPage}>頁面跳轉</button>
</p>
<hr/>
{/*響應流程 a href => Route path;id不是路徑 是傳遞的引數*/}
<Route path='/home/message/messagedetail/:id' component={MessageDetail} />
{/*<Route path={`${path}/:id`} component={MessageDetail}></Route>*/}
</div>
)
}
}
message-detail.jsx
import React from 'react'
const messageDetails = [
{id: 1, title: 'Message001', content: '人力部'},
{id: 3, title: 'Message003', content: '專案部'},
{id: 6, title: 'Message006', content: '財務部'},
]
export default function MessageDetail(props) {
// 得到請求引數中的id
console.log(props)
const id = props.match.params.id
// 得到對應的message
// 返回第一個結果為true的陣列元素。*1是為了保證id的陣列型別一致
const md = messageDetails.find(md => md.id===id*1)
return (
<ul>
<li>ID: {md.id}</li>
<li>TITLE: {md.title}</li>
<li>CONTENT: {md.content}</li>
</ul>
)
}