github:https://github.com/CTCSU/ct-learn-react
首先说下对这篇文章学习的概况。大概从3/12-4/2,每天平均花费半个小时,也就是一共10个小时来做这个事。时间确实比较零碎,对效率可能有一定的影响。此外,本文的内容有部分有错漏,出现很多问题要一一解决,整体上来说不是特别好。
全篇分为三部分:
- 环境的构建;
- 用React 构建出一个项目;
- 使用Redux 对此前的项目进行优化;?
- 安装npm
- 使用npm init 生成package.json 文件
- 使用 npm install 安装各种依赖
- react ,react-dom,
- webpack, webpack-dev-server
- babel (babel-core,babel ...)
- 安装其他的内容。
- 添加scripts;
- 通过命令行启动;
-
componet
App extends React.Componet{}
-
set state 方法
-
通过render 来构建html 的元素
-
React 项目的历程:
- 在html 中声明div
- 使用APP extends React的Componet,用render 方法输出html 元素
- 创建组件文件,
- 引入组件,并将state 中的值按照props 传下去;并且可以将一些方法也传递进去。
在这个过程遇到了两个问题:
- 读懂webpack.config.js 的配置,将文件的后缀改为jsx后,jsx的文件无法打包、一开始项目指定的目录不一致,导致项目无法启动
- js 的格式化问题,使用vscode 时,右下角可以指定js 的类型,要选中react 才能格式化js 中的html 标签
- bind 的用法,其实我现在也不太明白;后面再学吧;反正要用bind(null,i) 这样的方式,然后a(i) 就可以接受到i
- 在jsx 中使用style 要用style={{"margin-bottom":20px}} 这样的方式
-
创建redux 的modules; 在其中定义state 和一些方法;
-
创建containers,里面指定如何将state 映射成props 和将方法映射成props,关键是通过dispatch 来做;
connect(mapStateToProps, mapDispatchToProps)(ToDoApp);
-
组件需要的那些方法就在props中,通过上面一步就已经将所有的值都放到了props里面去了,同时,原来在state 里面拿的值也需要从props 里面获取;
-
需要configureStore.js 配置store
import {
createStore,
applyMiddleware,
combineReducers
} from 'redux'
import {
createLogger
} from 'redux-logger'
import toDoApp from './modules/toDoApp'
const loggerMiddleWare = createLogger();
const createStoreWithMiddleware = applyMiddleware(loggerMiddleWare)(createStore);
const reducer = combineReducers({
toDoApp
});
const configureStore = (initialState) => createStoreWithMiddleware(reducer, initialState);
export default configureStore;
通过上面的代码,主要要combinereducer、增加Logger的Middleware层;
同时需要在APP.js 中指定Provider 和Container
<Provider store={store}>
<ToDoAppContainer />
</Provider>
--src
--components
--input.jsx
--List.jsx
--ToDoApp.jsx
--containers
--toDoAppContainer.js
--redux
--modules
--toDoAppContainer.js
--configureStore.js
--app.js