react+redux+react-router4配置过程_react-redux+react-router-程序员宅基地

1)创建react单页面应用

npm install -g create-react-app
create-react-app my-app

2)安装redux

npm install --save redux
npm install --save react-redux

3)安装react-router,现在用的是版本4,和之前的用法和配置方法都有所区别。

npm install --save history
npm install --save react-router-dom
npm install --save react-router-redux

4)安装类型检测库prop-types

npm install --save prop-types

现在package.json长这样:

{
  "name": "myrouter",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "history": "^4.7.2",
    "prop-types": "^15.5.10",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-redux": "^5.0.6",
    "react-router-dom": "^4.2.2",
    "react-router-redux": "^5.0.0-alpha.6",
    "react-scripts": "1.0.13",
    "redux": "^3.7.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

index.js长这样:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { createStore} from 'redux';
import { Provider } from 'react-redux';
import createHistory from 'history/createBrowserHistory';
import { ConnectedRouter, routerReducer, routerMiddleware, push } from 'react-router-redux';
import {BrowserRouter as Router, Route, Link,Switch} from 'react-router-dom';
import reducers from './store/store' // 存放reducers的文件
//样式文件
import './index.css';
//组件
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import About from './dontknow/About'
import Inbox from './dontknow/Inbox'
import InboxChild from './dontknow/InboxChild'

const history = createHistory();
const store = createStore(reducers);
ReactDOM.render(
    <Provider store={store}>
        { /* ConnectedRouter will use the store from Provider automatically */ }
        <ConnectedRouter history={history}>
            <div>
                <Switch>
                    <Route exact path="/" component={App}/>
                    <Route path="/about" component={About}/>
                    <Switch>
                        <Route exact path="/inbox" component={Inbox}/>
                        <Route path="/inbox/react/:id" component={InboxChild}/>
                    </Switch>
                </Switch>
            </div>
        </ConnectedRouter>
    </Provider>,
    document.getElementById('root')
);
registerServiceWorker();

(待续)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oak160/article/details/77935901

智能推荐

python---素数相关_输出x的除1和它本身以外的因数-程序员宅基地

文章浏览阅读371次。python3.x实例1.判断质数一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数。代码:#质数判断n = int(input())if n>1: for i in range(2,n): if n%i==0: print("{}不是质数".format(n)) brak else: print("{}_输出x的除1和它本身以外的因数

2019.01.28【NOIP提高组】模拟B组 JZOJ 4235 序列-程序员宅基地

文章浏览阅读239次。惊现暴力AC题,然而没打换行少了60分

Android 底层框架笔记-程序员宅基地

文章浏览阅读895次。android底层的实现 android的apk想要获取底层的数据或者接口,要实现底层的相关服务,现对此作出记录 1,编写hal层 hal层代码主要是对驱动提供的接口进行操作,其中有open ,read,write,mmap,ioctl和sys下的一些接口的操作; hal层代码严格按照安卓的那套写法编写,

宏替换与内联函数的区别(c/c++)-程序员宅基地

文章浏览阅读339次。C/C++中宏替换与内联函数的区别:(1)宏定义define:宏定义不是函数,只是简单地把先编辑好的代码在预处理阶段替换进去,所以在替换时不会进行类型检查什么的而是在编译阶段再去检查代码的正确性;但是内联函数是真正的函数,且具有函数所具有的所有特征(2)宏定义是单纯的代码替换,所以在宏定义时需要小心优先级以及类型检查等问题,如:#define mul(N) N*Nint main(){ mul(2+2); //mul("hello"); //不会进行类型检查} 执行结果为:8因为展

LOJ#6036. 「雅礼集训 2017 Day4」编码(2-SAT)-程序员宅基地

文章浏览阅读669次。传送门题解: 对于每个串,在Trie树上找到他’?’处填0或者1的位置。 那么他的子树中(不包括他)的所有串不能选。 对于他这个节点我们记录一个前缀后缀就可以做到O(n)O(n)O(n)了。#include &lt;bits/stdc++.h&gt;using namespace std;const int N=1e6+50;typedef pair &lt;int,int&..._「雅礼集训 2017 day4」编码

Struts2远程代码执行漏洞检测的原理和代码级实现-程序员宅基地

文章浏览阅读4k次。想必最近很火的Struts2漏洞大家应该有所耳闻吧,如果你没听说也没关系,关于这个漏洞的描述可以用一句话总结:漏洞很普遍,后果很严重。由于JavaEE的应用普遍偏向于使用SSH框架(Spring+Struts+Hibernate)开发,而且存在漏洞的Struts 所有主流的Java中间件服务器都可能受到该漏洞的影响,特别是大家喜欢的Tomcat,问题尤为严重,倒不是因为Tomcat上Strut

随便推点

周鸿祎:什么是好的用户体验?-程序员宅基地

文章浏览阅读2.9k次。说今天是一个体验为王的时代,一点也不过分。做大众消费品的人可能已经感觉到,今天消费者的话语权越来越强,如果你的产品做得好,不久就会口口相传;如果你的产品做得烂,不久就会骂声一片。所有这一切在过去是不可想象的。但今天,每个人都可以发布信息,每个人的声音即使弱小,也总能被别人听到。在互联网时代,产品是否能够成功,用户体验越来越变成一个关键,用户买了你的产品,并非是与你结束了交易。恰恰相反,

Bezier曲线——de Casteljau递推算法实现_给出bezier曲线的分割递推算法-程序员宅基地

文章浏览阅读7.6k次,点赞4次,收藏32次。1. 定义给定n+1n+1n+1个点的位置矢量Pi(i=0,1,…,n)P_i(i=0,1,\dots,n)Pi​(i=0,1,…,n),则Bezier曲线可以定义为P(t)=∑i=0nPiBi,n(t),t∈[0,1]P(t)=\sum_{i=0}^nP_iB_{i,n}(t),\quad t \in [0,1]P(t)=i=0∑n​Pi​Bi,n​(t),t∈[0,1]其中PiP_i..._给出bezier曲线的分割递推算法

优秀软件工程师的十种特质-程序员宅基地

文章浏览阅读1.5k次。如今,每家公司都似乎成了科技公司。从软件创业公司到投机性投资公司、制药巨头和媒体巨头,它们都越来越多地加入到软件业务行列。   代码质量不仅成为了一个必需品,更成为了一个竞争优势。因为众多公司围绕软件而竞争,开发软件的人——软件工程师正显得越发重要。但是,你该如何发现那种百里挑一的程序员呢?在本文中,我们简明扼要地列出了明星开发人员的10种特质。1. 热爱编..._软件工程师特点

muduo源码分析——整体架构_muduo 源码详细-程序员宅基地

文章浏览阅读351次。 最近在学习网络编程,从flamingo这个服务器开始,当然这个服务器也是基于muduo开发的,所以也算是在研究muduo吧。以前也有记录的习惯,在ipages上或者写在本子上,不过还是记录在博客上吧,一来可以分享自己的心得,二来备查也方便,再者有任何的理解偏差,也会有网友指正吧。 之前也看过不少muduo的分析,这次决定按照自己的理解来写博客,或许会有偏差,希望大家能帮我指出来,谢谢! 先..._muduo 源码详细

SpringBoot整合mybatis常见的增删改查,批量删除,分页查询等_springboot批量删除 注解-程序员宅基地

文章浏览阅读632次。SpringBoot整合mybatis常见的增删改查,批量删除,分页查询等AssistApplyBopackage com.qianhong.oa.bo.administration.assistadministration.assistapply;import java.util.Date;import com.fasterxml.jackson.annotation.JsonFor..._springboot批量删除 注解

sqoop 导入到hive字段全是null_Sqoop高频面试题知识点总结-程序员宅基地

文章浏览阅读329次。Sqoop1 Sqoop参数/opt/module/sqoop/bin/sqoop import --connect --username --password --target-dir --delete-target-dir --num-mappers --fields-terminated-by --query "$2" ' and $CONDITIONS;'2 Sqoop导入导出Null存储..._sqoop export 字段null