reactjs - React redux + react-loadable ...如何使其工作?
问题描述
我正在使用 react 应用程序,并且正在使用react-loadable
and react-redux
。当我开始项目时,我没有使用react-redux
Loadable 组件,并且运行良好。但现在我想使用 redux(我正在学习......)但我无法让它工作:(
我不知道我必须做什么。
谢谢!(:
错误
index.js
import 'react-app-polyfill/ie9'; // For IE 9-11 support
import 'react-app-polyfill/ie11'; // For IE 11 support
import './polyfill'
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import * as serviceWorker from './serviceWorker';
import './index.css';
import {store} from './helpers';
import {App} from "./views/App";
ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>,
document.getElementById('root')
);
应用程序.js
import React, {Component} from 'react';
import {connect} from 'react-redux';
import {HashRouter, Route, Switch} from 'react-router-dom';
import Loadable from 'react-loadable';
import '../../App.scss';
import {history} from '../../helpers';
import LoadingSpinner from '../../components/Loading/LoadingSpinner';
import PrivateRoute from '../../components/PrivateRoute';
import {alertActions} from '../../actions/alert_actions';
// import {Login} from "../Pages/Login";
const loading = () => <LoadingSpinner/>;
const Login = Loadable({
loader: () => import('../../views/Pages/Login')
.then(state => {
const {store} = this.props;
}),
loading
});
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
const {alert} = this.props;
return (
<HashRouter>
<Switch>
<Route exact path="/login" name="Login Page" component={Login}/>
</Switch>
</HashRouter>
);
}
}
function mapStateToProps(state) {
const {alert} = state;
return {
alert,
};
}
const connectedApp = connect(mapStateToProps)(App);
export {connectedApp as App};
解决方案
如果你想将登录页面组件与 redux 和 react-loadable 一起使用,你必须导入登录页面组件容器,该容器通过 connect() 函数连接到 Redux 存储。例如,您的容器看起来像这样,
login.container.js
import { connect } from 'react-redux';
import { Login } from '../../views/Pages/Login'
const mapStateToProps = ...
const mapDispatchToProps = ...
export default connect(
mapStateToProps,
mapDispatchToProps
)(Login)
然后为了延迟加载它,您只需导入以前的文件,而不是组件作为加载器键。
应用程序.js
...
const loading = () => <LoadingSpinner/>;
const Login = Loadable({
loader: () => import('./login.container.ts'),
loading
});
...
现在该组件应该可以在 Redux 中按预期工作。
推荐阅读
- ruby-on-rails - 密码参数未包含在强参数中
- image - UWP 将图像转换为字符串
- php - 从数据库(mysql)中获取 html/php 中复选框的值
- python - 张量流范围问题
- mysql - 撤消 CTE(公用表表达式)
- elasticsearch - elasticsearch - 文档类型之间的查询
- react-native - 将属性声明为样式时,Eslint react/no-typos 规则会引发错误
- sas - SAS Studio:使用“我的文件夹”中的数据
- javascript - 使用 WebForm_DoPostBackOptions 和 WebForm_DoPostBackWithOptions 调用 Html 按钮
- git - 添加指向本地 git 存储库的远程似乎失败