React总结

1. 搭环境

此处默认各位都是有那么一点前端开发经验的,所以Node自行安装。

1.1 脚手架

  • 官方推荐 => create-react-app
// install
$ npm install -g create-react-app
复制代码

1.2 起项目

1.2.1 package.json

// setting
"scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"
}
复制代码

1.2.2 start

// start
$ npm run start
复制代码

1.2.3 打包

// start
$ npm run build
复制代码

2. 项目结构

|public
|----|favicon.ico
|----|index.html
|dist
|src
|----|common
|    |pages
|    |statics
|    |----|img
|    |    |iconfont
|    |store
|    |----|index.js
|    |    |reducer.js
|    |    |actionTypes.js
|    |    |actionCreators.js
|    |App.js
|    |index.js
|package.json
|README.md
复制代码

3. 入口文件

  • /src/index

  • 指定渲染的文件以及渲染的文件插入的DOM节点(document.getElementById('root'))。

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<App />, document.getElementById('root'));
复制代码

4. 渲染的入口文件

  • /src/App.js

  • 路由/全局样式/派发store……

import React, { Component } from 'react';
import { GlobalStyle, RouteStyle } from "./style";
import { FontGlobal } from "./statics/iconfont/iconfont";
import { Provider } from "react-redux";
import { BrowserRouter, Route } from "react-router-dom";
import Home from "./pages/home";
import Detail from "./pages/detail";
import store from "./store"class App extends Component {render() {const providerStyle = {width: "100%",height: "100%"};return (<Provider store={store}><div style={providerStyle}><GlobalStyle /><FontGlobal /><BrowserRouter><RouteStyle><Route path="/" exact component={Home} /><Route path="/detail" exact component={Detail} /></RouteStyle></BrowserRouter></div></Provider>);}
}export default App;
复制代码

4.1 路由

  • 依赖包 => react-router-dom

4.1.1 install

$ npm i react-router-dom -S
复制代码

4.1.2 路由表

import { BrowserRouter, Route } from "react-router-dom";<BrowserRouter><Route path="/" exact component={Home} /><Route path="/detail" exact component={Detail} />
</BrowserRouter>
复制代码
  • exact精确匹配path路径。

  • component表示当前路径加载组件。

4.1.3 路由传参

4.1.3.1 通配符
  • 刷新页面参数不会丢失,但很丑
// Route
<Route path='/path/:name' component={}/>// Link组件
<Link to="/path/xxx"></Link>// 取参
this.props.match.params.name
复制代码
4.1.3.2 query
  • 好看但会丢失参数
// Route
<Route path='/path' component={}/>// Link组件
<Link to="{{ pathname: "/path", query: "queryValue" }}></Link>// 取参
this.props.location.query
复制代码
4.1.3.3 state
  • 同query
// Route
<Route path='/path' component={}/>// Link组件
<Link to="{{ pathname: "/path", state: "stateValue" }}></Link>// 取参
this.props.location.state
复制代码

4.1.4 路由跳转

4.1.4.1 Link
<Line to="/path"></Link>
复制代码
4.1.4.2 history.push
this.props.history.push({ pathname:' /user', ……})
复制代码

4.2 样式

  • 依赖包 => styled-components

  • 将页面中的标签等用js封装成样式的组件。

4.2.1 全局样式

// 1. 导出GlobalStyle
import styled, { createGlobalStyle } from "styled-components";export const GlobalStyle = createGlobalStyle`
html {width: 100%;height: 100%;
}
`;// 2. 在渲染入口文件中添加
<Provider><div style={providerStyle}><GlobalStyle /><FontGlobal /><BrowserRouter><RouteStyle><Route path="/" exact component={Home} /><Route path="/detail" exact component={Detail} /></RouteStyle></BrowserRouter></div>
</Provider>
复制代码

4.2.2 局部样式

import styled from "styled-components";export const Img = styled.img.attrs({src: xxx
})`width: 100px;height: 100px;
`;// 导入使用
<Img/>
复制代码

4.3 派发store

import { Provicer } from "react-redux";
import store from "./store"<Provicer store={store}>// 组件内都能接收到store
</Provicer>
复制代码

4.3.1 组件内接收

import { connect } "react-redux";class Header extends Component {render() {return (<div onClick={this.props.handleDispach}>Hello</div>this.props.login? <div>Logout</div>: <div>Login</div>)}
}const mapStateToProps = (state) => ({// 映射store里面的值login: state.get("login")
});const mapDispatchToProps = (dispatch) => {return {// 接受挂载在props上的方法  handleDispach() {// TODOdispatch(action);}}
};export default connect(mapStateToProps, mapDispatchToProps)(Heacer);
复制代码

5. redux

  • 依赖包 => redux/react-redux/redux-thunk/immutable/redux-immutable

5.1 redux

  • 用于构建store实例
import { createStore ,applyMiddleware, compose } from "redux";
import reducer from "./reducer";
import thunk from "redux-thunk";const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(reducer,composeEnhancers(applyMiddleware(thunk))
);export default store;
复制代码

5.2 react-redux

  • 用于派发store,在页面中映射state数据等。

  • 如上4.3.

5.3 redux-thunk

  • 同过redux的中间件使用thunk。

  • 用于在actionCreator.js中返回一个函数。

  • 异步数据的处理。

// 1. 普通数据
export const handleSwitchList = (value) => ({type: actionTypes.SWITCH_LIST,value
});// 2. 异步数据 =》 提供dispatch方法将action传给页面供用户调用。
// mapDispatchToProps(dispatch)会派发action。
export const handleRecommendList = () => {return (dispatch) => {axios.get("/api/recommendList.json").then(res => {res = res.data.data;dispatch(handleRecomList(res));}).catch(err => {throw Error(err);})}
};
复制代码

5.4 immutable

  • 用于将数据结构变成immutable形式,强制修改会报错。
// reducer.js
import { fromJS } from "immutable";const defaultState = fromJS({value: xxxx
}) export default (state, action) => {if (action.type ==="xxx") {return state.set("value", state.get("value"));}
}
复制代码

5.5 redux-immutable

  • 用于将多个reducer合并。
import { combineReducers } from "redux-immutable";
import { reducer as headerReducer } from "../common/header/store";
import { reducer as homeReducer } from "../pages/home/store";
import { reducer as loginReducer} from "../pages/login/store";export default combineReducers({header: headerReducer,home: homeReducer,login: loginReducer
})
复制代码

6. 动画

  • 依赖包 => react-transition-group

  • 具体上GitHub

7. 生命周期函数

  • 官网

转载于:https://juejin.im/post/5cb738f3e51d456e5a0728e2

总结了点React,咱也不敢说相关推荐

  1. react非常适合入门者学习使用的后台管理框架

    项目简介 该项目提供一个非常简洁的后台管理ui界面,非常适合初学者学习使用.项目结构: 项目地址:GitHub项目地址 技术栈 - react - antd - react-router-dom - ...

  2. 在 react 里使用 antd

    在 react 里使用 antd 在 powershell 里npm i antd 引入方式: import '../node_modules/antd/dist/antd.css'

  3. 在React Hook里使用history.push跳转

    在React Hook里使用history.push跳转 react hook里用不了this.props.history的解决方法 首先引入 import { useHistory } from ' ...

  4. 在react hook里使用mobx(配置mobx依赖)

    在powershell里安装依赖 (直接npm i mobx或者npm i mobx-react是会报错的) npm i mobx mobx-react --save save是下载到"de ...

  5. React router 的 Route 中 component 和 render 属性理解

    React router 的 Route 中 component 和 render 属性理解 Route 标签的三个互斥属性 render.component.children Route 就是用来匹 ...

  6. react 子组件获取变量属性值

    刚刚遇到一个问题:子组件属性值绑定了变量,但是在子组件的componentDidMoiunt中拿到的值始终是undefinded.如下: 1 <PieInfo 2 title='有效病案' 3 ...

  7. 超简单的react和typescript和引入scss项目搭建流程

    1.首先我们先创建一个react项目,react官网也有react项目搭建的命令 npx create-react-app my-app cd my-app 2.安装我们项目需要的样式依赖,这个项目我 ...

  8. React Native之ViewPagerAndroid跳转页面问题

    前言: 网上目前react-native的教程较少,加上许多帖子还是用的ES5(2015年6月已发布ES6标准),有些细节很难找到答案,这里把遇到的问题做一个分享,让学习者尽量少踩坑. 出现问题: 1 ...

  9. http状态404 vscode_VS Code 调试完全攻略(5):基于浏览器的 React 应用

    每日前端夜话第344篇 翻译:疯狂的技术宅 作者:Charles Szilagyi 来源:charlesagile 正文共:1750 字 预计阅读时间:7 分钟 这次我们来研究怎样把调试器连接到用 C ...

  10. react 组件连动效果_react-redux应用之独立组件联动实例

    准备工作 先导入必要的库资源 import React, { Component, PropTypes } from 'react' import ReactDOM from 'react-dom' ...

最新文章

  1. HTML5移动端拖动惯性
  2. OGNL是Object-Graph Navigation Language
  3. word域变成正常文本_超级干货|最全的PPT、Excel、Word实用宝典,助你办公效率翻倍!...
  4. 支付宝备用金七天不还会不会上征信?
  5. .net的retrofit--WebApiClient底层篇
  6. android初步ui线程案例,android – 它是一个bug还是一个功能?在某些情况下,可以从未在UI线程上运行的任务访问UI线程...
  7. Java字符串的重要性_java中的字符串相关知识整理
  8. mysql命令导出方法_MySql使用mysqldump 导入与导出方法总结
  9. 电脑软件怎么卸载干净_软件分享(一)【电脑】软件卸载工具
  10. 485通信自动收发数据实现
  11. python使用-Python 应该怎么去练习和使用?
  12. url去重:布隆过滤器-python实现
  13. Oracle的共享关闭 独有关闭和共享更新关闭 (2)
  14. 【C】——C深入探讨——switch语句的default位置【转】
  15. 代理、正向代理与反向代理
  16. Demo3D详解-----附下载地址
  17. unity3D人物动画
  18. 100个穷二代,每人100元,60岁前谁能翻盘?
  19. 如何培养孩子的阅读兴趣
  20. HZNUOJ 2058 凯撒密码

热门文章

  1. 利用python数据可视化_想用Python做数据可视化?先迈过这个“坎”
  2. Shell脚本详细介绍
  3. java内部float,Java中的float是什么?
  4. oracle删除无效归档日志,求助:rman无法按照策略删除过期的归档日志
  5. cmake导入so库_libgo - 协程库、并行编程库
  6. python使用osgeo库_Python使用内置urllib模块或第三方库requests访问网络资源
  7. 【视频课】模型优化拆分!分别学习模型剪枝与模型量化理论与实践
  8. 2022年跨境卖家如何布局海外市场?东南亚“钱”景可观
  9. 淡季不淡!速卖通户外运动产品好做吗?来看看法国这些爆款!
  10. android中AVD的使用