react入门系列之redux的一些补充connect , provider

### redux的做一些补充
- 安装redux add react-redux
- provider 第一个核心api
- 在入口src文件夹中的index.js中使用,包裹其他组件
- 并在provider添加store={store}属性,这样它所包裹的组件就都可以使用store中的数据了
- 怎么获取store,就要用下面这个 connect api
- connect 第二个核心api
- 它能让需要使用store数据的组件和store做连接
- mapStateToProps ==> 把store中的state数据映射到组件中的props里面
- mapDispatchToProps ==> 把store中的dispatch方法挂载到props上
  1 /**
  2 * index.js
  3 */
  4 import React from 'react'
  5 import ReactDOM from 'react-dom'
  6 import TodoList from './todoList'
  7 import { Provider } from './store'
  8 const App = (
  9 <provider store={store}>
 10 <TodoList/>
 11 </provider>
 12 )
 13 ReactDOM.render(App, documnet.getElementById('root'));
 14 // -----------------分割线------------------------------------------------------------------------------
 15 
 16 /**
 17 * TodoList组件
 18 */
 19 import React, { Component } from 'react';
 20 import { connect } from 'react-redux'; // 引用react-redux这个对象中的一个属性,要使用解构赋值,用花括号包裹
 21 
 22 const TodoList = (props) => {
 23 const { inputValue, list, handleInputChange, handleClick, handleDelete } = props
 24 render() {
 25 return (
 26 <div>
 27 <div>
 28 <input value={inputValue} onChange= {handleInputChange}/>
 29 <button onClick={handleClick}>提交</button>
 30 </div>
 31 <ul>
 32 {
 33 this.porps.list.map((item,index)=>{
 34 return <li onClick = {() => { handleDelete(index) }} key={index}>{item}</li>
 35 })
 36 }
 37 </ul>
 38 </div>
 39 )
 40 }
 41 }
 42 // mapStateToProps ==> 把store中的state数据映射到组件中的props里面
 43 const mapStateToProps = (state) => {
 44 return {
 45 inputValue: state.inputValue,
 46 list: state.list
 47 }
 48 }
 49 // mapStateToProps ==> 把store中的state数据映射到组件中的props里面
 50 const mapDispatchToProps = (dispatch) => {
 51 return {
 52 handleInputChange (e) {
 53 const action ={
 54 type: 'change_input_value',
 55 value: e.target.value
 56 }
 57 dispatch(action)
 58 console.log(e.target.value)
 59 },
 60 handleClick () {
 61 const action ={
 62 type: 'add_todolist_item'
 63 }
 64 dispatch(action)
 65 },
 66 handleDelete (index) {
 67 const action = {
 68 type: 'delete_todolist_item',
 69 index
 70 }
 71 dispatch(action)
 72 }
 73 }
 74 }
 75 
 76 export default connect(mapStateToProps,mapDispatchToProps)(TodoList)
 77 
 78 // -------------------分割线---------------------------------------------------------------------------
 79 
 80 /**
 81 * reducer.js
 82 */
 83 const defaultState = {
 84 inputValue: '' ,
 85 list: []
 86 }
 87 export default (state= defaultState, action) => {
 88 if( action.type === 'change_input_value') {
 89 const newState = JSON.parse(JSON.stringify(state));
 90 newState.inputValue = action.value;
 91 return newState
 92 }
 93 if ( action.type === 'add_todolist_item') {
 94 const newState = JSON.parse(JSON.stringify(state));
 95 newState.list.push(newState.inputValue)
 96 newState.inputValue = ''
 97 return newState
 98 }
 99 if ( action.type === 'delete_todolist_item') {
100 const newState = JSON.parse(JSON.stringify(state));
101 newState.list.splice(action.index, 1)
102 return newState
103 }
104 return state
105 }

 

转载于:https://www.cnblogs.com/boye-1990/p/11475400.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值