快速入门 redux | react-redux -只讲操作不讲理论

1 篇文章 0 订阅
1 篇文章 0 订阅

快速入门redux -只讲操作不讲理论

前言: 

    最近很多师弟师妹跑过来问我 , redux好难学啊 看了那么多文章 视频什么的还是搞不懂 . 想想我刚开始学的时候也是看了大量的文章 懂了 好像又不懂的状态, 后来工作中要用到了,写得多了 其实也就那么一回事. 无非就是一开始 单词太多了 记不住. 还有里面的一些专业术语和 api . 说多都是泪.如果你看到了我这篇文章 证明你已经看了很多文章了 但是还是搞不懂redux. 这次我就不讲理论了.直接开干代码. 等你工作了 也基本是这样用 用多了你就懂为什么要用它了.

     现在你先这么理解 就是把所有的数据都放到一个容器里面统一管理 那个容器就像一棵树 有着各种数据 各种状态. 然后你react里面的组件就是通过特定的方式去拿容器里的 数据&状态 渲染到页面上 然后你想更新的时候 也是通过特殊的方式来更新容器里的 数据&状态 ,然后只要这个组件更新了 其他的组件也会跟着更新就对了.

接下来我们直接撸代码了

理论: 参考阮大神的博客 :http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html

redux 入门

1. 搭建好 node 环境

2. 打开终端 随便进入你喜欢的工作目录 运行:

  npm install -g create-react-app

3. 创建react 简易脚手架 运行:  create-react-app  redux-demo1

4. 打开 redux-demo 

你会得到如下目录

404

删除src下多余的东西  只剩下

5. 进入正题 下载redux: npm i redux -S

6. src 目录下新建 reducer/index.js

// 这个文件是创建reducer函数的, 专门用来处理 发送过来的ction
const initState = {
  value: "默认值",

};
const reducer = (state = initState, action) => {
  console.log("打印啦", state, action)
  switch (action.type) {
    case "send_type":
      return Object.assign({}, state, action)
    default:
      return state
  }
};

module.exports = {
  reducer
}

7. src 目录下 新建store/index.js

// 引入redux
import { createStore } from 'redux'

// 导入我们创建的 reducer
import { reducer } from '../reducer'
const store = createStore(reducer);

export default store;

8. src 目录下 新建 action/index.js

// 这是一个action 的构建函数

const sendAction = () => {
  // 我们需要返回一个action对象
  return {
    type: "send_type",
    value: "我是一个action"
  }
}
module.exports = {
  sendAction
}

9. src 目录下 新建 page/home/index.js 组件

import React from 'react';
// 导入store
import store from '../../store'
// 导入 action
import { sendAction } from '../../action'

export default class Home extends React.Component {
  // 点击事件
  handleClick = () => {
    const action = sendAction()
    store.dispatch(action)
  };
  // 当组件一加载完毕 来监听
  componentDidMount() {
    store.subscribe(() => {
      console.log("subscribe:", store.getState())
      this.setState({})
    })
  }
  render() {
    return (
      <>
        <button onClick={this.handleClick}>点我,发送一个action</button>
        <div>{store.getState().value}</div>
      </>
    )
  }
}

10. 修改 App.js

import React from 'react';
import Home from './page/home'

function App() {
  return (
    <div className="App">
      <Home></Home>
    </div>
  );
}

export default App;

11. 修改 index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';


ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);


最终

然后 npm start 就会得到一个最简单的redux 应用

404

404

好了 我们入门redux了 但是我们一般工作中用的是 react项目 是结合react-redux 来用的 

react-redux

这次不同了 我们写两个兄弟组件 一个组件直接修改另一个组件的数据

1. 创建一个建议的脚手架:

 create-react-app  react-redux-demo1 

2. 根据redux-demo1 一样 删除多余的东西 .

3. 下载redux 和react-redux 

     npm i redux -S

     npm i react-redux -S

4. src目录下 新建reducer/index.js

const initState = {
  count: 0
}

exports.reducer = (state = initState, action) => {
  switch (action.type) {
    case "ADD_ACTION":
      return {
        count: state.count + 1
      }
    case "DEL_ACTION":
      return {
        count: state.count - 1
      }
    default:
      return state
  }
}

5. src目录下新建 store/index.js

import { createStore } from 'redux';
import { reducer } from '../reducer'

export default createStore(reducer)

6. src 目录下 新建 components/ComA/index.js 与components/ComB/index.js

import React from 'react'
import { connect } from 'react-redux'

class ComA extends React.Component {
  constructor(props) {
    super(props)
  }
  handleClickAdd = () => {
    // 发送action
    this.props.add()
  }
  handleClickDel = () => {
    // 发送action
    this.props.del()
  }
  render() {
    return (
      <>
        <button onClick={this.handleClickAdd}> + </button>
        <button onClick={this.handleClickDel}> - </button>
      </>
    )
  }
}
/**
 * 这个是函数需要有一个返回值 这个返回值是一个对象
*/
const mapDispatchToProps = (dispatch) => {
  return {
    // 利用dispatch发送一个action
    // 传递action 对象 我们要去定义一个type属性
    add: () => {
      dispatch({
        type: "ADD_ACTION"
      })
    },
    del: () => {
      dispatch({
        type: "DEL_ACTION"
      })
    }
  }
}
// A是发送方 所以要实现 第二个参数
export default connect(null, mapDispatchToProps)(ComA) 
import React from 'react'
import { connect } from 'react-redux'


class ComB extends React.Component {
  constructor(props) {
    super(props)
  }
  render() {
    return (
      <div>{this.props.count}</div>
    )
  }
}
/**
 * 接收的是两个参数
*/
const mapStateToProps = (state) => {
  return state
}
// B 组件是属于接收方 实现第一个参数
export default connect(mapStateToProps)(ComB)

7. 修改App.js

import React from 'react';
import './App.css';

import { Provider } from 'react-redux';
import store from './store'

import ComA from './components/ComA';
import ComB from './components/ComB';

function App() {
  return (
    // 注意这里 这里用了react-redux的一个组件 然后吧store 传进去了
    <Provider store={store}>
      <div className="App">
        <div>
          <ComA></ComA>
          <ComB></ComB>
        </div>
      </div>
    </Provider>

  );
}

export default App;

8. 修改 index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

最终 

然后 npm start

效果:

这样吧里面的每一步都自己写一遍 在追一下流程 ,你就算是入门了 可能会我理解不对的地方 欢迎支出 虚心求教... 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值