这个antd官网写的很详细,我也是根据官网操作的。
引入antd @craco/craco craco-less 这三个包
npm i --save antd @craco/craco craco-less将样式改成less
/* src/App.js */ - import './App.css'; + import './App.less'; /* src/App.less 这里的文件名改为App.less, 然后引入App.js*/ - @import '~antd/dist/antd.css'; + @import '~antd/dist/antd.less';创建配置文件 craco.config.js, 文件如下
const CracoLessPlugin = require('craco-less'); module.exports = { plugins: [ { plugin: CracoLessPlugin, options: { lessLoaderOptions: { lessOptions: { modifyVars: { '@primary-color': '#1DA57A' }, javascriptEnabled: true, }, }, }, }, ], };修改package.json
/* package.json */ "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", + "start": "craco start", + "build": "craco build", + "test": "craco test", }这样就引入成功了,使用方式
import React from 'react'; import { Button } from 'antd'; const App = () => ( <div className="App"> <Button type="primary">Button</Button> </div> ); export default App;在src下新建一个stores文件夹,存放stores主文件 引入mobx mobx-react
npm i --save mobx mobx-react然后在入口文件这样写
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import stores from './stores'; //引入我们刚刚新建的stores主文件 import { Provider } from 'mobx-react'; ReactDOM.render( {/*这个将我们所有储存在store里的数据挂载到组件的this.props中*/} <Provider {...stores} > <App /> </Provider>, document.getElementById('root') );在你想要用store的组件中,新建一个store文件 store.js里面这样写
import {observable, action} from 'mobx'; class LoginStore { @observable loginStore = { account: '222', password: '' } } export default new LoginStore;然后再store主文件src/stores/index.js引入
import LoginStore from '../pages/login/store'; export default {LoginStore};但在这里就会遇到一个问题
Support for the experimental syntax ‘decorators-legacy’ isn’t currently enabled (5:5): 这个问题的解决方式网上很多,大多都是用eject解决,我们也可以用craco来解决
安装下面的依赖
npm install --save @babel/plugin-proposal-decorators修改craco.config.js 如下
const CracoLessPlugin = require('craco-less'); module.exports = { plugins: [ { plugin: CracoLessPlugin, options: { lessLoaderOptions: { lessOptions: { modifyVars: { '@primary-color': '#1DA57A' }, javascriptEnabled: true, }, }, }, }, ], babel: { plugins: [ ["@babel/plugin-proposal-decorators", { legacy: true }] ] } };再重启问题就解决了。
当我要使用的时候,又报了个错误 × TypeError: Cannot read property ‘componentWillReact’ of undefined 这个错误的原因是mobx-react 6.1版本删除了componentWillReact,这个问题的解决方法就是给mobx-react降版本就可以了。
npm i mobx-react@5.4.3 --save使用方法
import React, {Component} from 'react'; import './index.less'; import {Input } from 'antd'; import { observer } from 'mobx-react'; @observer(['LoginStore']) class Login extends Component { render() { const {loginStore} = this.props.LoginStore; console.log(loginStore.account) // 成功输出222 return ( <div className="login"> <div className="container"> <h1>用户登陆</h1> <Input placeholder="输入账号" className="account"/> <Input.Password placeholder="输入密码" className="password"/> </div> </div> ); } } export default Login;