cnpm install -g umi
umi g page index
可以生成index页面。一共2个文件,一个是js一个是css。umi g dva:model foo
快速 dva 的 model。 "scripts": {
"dev": "umi dev",
"build": "umi build",
"test": "umi test"
},
.umi
的文件夹,里面就是umi扫描pages生成的文件,最主要的就是路由之类,可以看见在router文件里面,路由里需要哪个文件看的很清楚。它还把路由信息挂到window上了,直接使用window.g_routes可以看路由。里面有个patchRoutes是运行时修改路由,就是动态修改路由。
import styles from './index.css';
import Link from 'umi/link'
export default function () {
return (
<div className={styles.normal}>
<h1>Page index</h1>
<Link to="/user">/user</Link>
</div>
);
}
import styles from './user.css';
import router from 'umi/router'
export default function () {
console.log(router);
return (
<div className={styles.normal}>
<h1>Page user</h1>
<button onClick={() => router.push('/xcxc')}>push</button>
</div>
);
}
src/layouts/index.js
import Link from 'umi/link'
export default function (props) {
return (
<div >
<h1>layout</h1>
<Link to="/">/</Link>
<Link to="/user">/user</Link>
<div>{props.children}</div>
</div>
);
}
_layout.js
文件。这个路由下的所有路由都会通过它来渲染。src/pages/product/_layout.js
import Link from 'umi/link'
export default function (props) {
return (
<div >
<h1>productA</h1>
<Link to="/product/productA">/productA</Link>
<Link to="/product/productB">/productB</Link>
<div>{props.children}</div>
</div>
);
}
src/pages/product/$id.js
export default function (props) {
return (
<div >
ID:{props.match.params.id}
</div>
);
}
import Link from 'umi/link'
export default function (props) {
return (
<div >
<h1>productA</h1>
<Link to="/product/productA">/productA</Link>
<Link to="/product/productB">/productB</Link>
<Link to="/product/1">/1</Link>
<Link to="/product/2">/2</Link>
<div>{props.children}</div>
</div>
);
}
/**
* title: privatepage
* Routes:
* - ./PrivateRouter.js
*/
export default function (props) {
return (
<div >
<h1>Private page</h1>
</div>
);
}
./PrivateRouter.js
是相对于根目录的位置。就是跟package.json一个位置。{ title: 'privatepage', Routes: [ './PrivateRouter.js' ] }
PrivateRouter.js
import { Route, Redirect } from 'react-router-dom'
export default ({ render}) => {
return (
<Route render={
(props) => localStorage.getItem('login') ? render(props) : <Redirect to='/' />
}>
</Route>
)
}