redux在react中的使用方法(入门级)

redux原理解读

在控制台中打印redux

const redux = require('redux')
// console.log(redux) // createStore 创建仓库 + applyMiddleware 使用中间件 + combineReducers 分模块使用redux
console.log(redux.createStore(() => {})) // 至少传入一个函数 -- reducer --- 纯函数
// dispatch:  触发修改状态的方式
// subscribe: 订阅 -- 数据改变,要以何种方式 更新视图
// getState: 获取状态

一.单纯使用redux

1.引入redux

import { createStore } from 'redux'


/**
 * 如果需要获取状态  store.getState()
 * 如果需要订阅 更新视图  store.subscribe(fn)  fn是关键 (状态/属性的改变会引起视图的二次渲染 ---  入口文件)
 * 如果需要触发更改状体啊  store.dispatch({ type: '' })
 */

2.创建redcer – 数据的改变必须经过纯函数修改

const defaultState = {
  count: 0
}
const reducer = (state = defaultState, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, count: state.count + 1 }
    case 'DECREMENT':
      return Object.assign({}, state, { count: state.count - 1 })
    default:
      return state
  }
}

export default reducer

3.创建store

import { createStore } from 'redux'

import reducer from './reducer'

const store = createStore(reducer)

export default store

4.入口文件处 订阅变化

import React from 'react'
import ReactDOM from 'react-dom'
import App from './redux/App'

import store from './redux/store'
function render () {
  ReactDOM.render(
    <App />,
    document.getElementById('root')
  )
}
render()

// 如果状态一旦发生改变,就重新执行 render 函数(自定义函数)
store.subscribe(render)

5.组件处使用状态管理器

import React, { Component } from 'react'
import store from './store'
export default class App extends Component {
  render() {
    return (
      <div>
        <button onClick = { () => {
          // 修改状态
          store.dispatch({ type: 'DECREMENT'})
        }}>-</button>
        { store.getState().count }
        <button onClick = { () => {
          store.dispatch({ type: 'INCREMENT'})
        }}>+</button>
      </div>
    )
  }
}

二.redux + react-redux

react-redux ---- 容器组件 + 展示组件(UI组件)
以todolist为例

1.入口文件

import React from 'react'
import ReactDOM from 'react-dom'

import App from './todolist/TodoList'

import { Provider } from 'react-redux' // 顶级组件中使用
import store from './todolist/store' 

ReactDOM.render(
  <Provider store = { store }>
    <App />
  </Provider>,
  document.getElementById('root')
)

2.创建reducer

const defaultState = {
  list: ['task 1', 'task 2', 'task 3']
}

const reducer = (state = defaultState, action) => {
  switch (action.type) {
    case 'ADD_ITEM':
      // 对象合并,合并list(数组)
      return { ...state, list: [ ...state.list, action.data ]}
    case 'REMOVE_ITEM':
      const arr = state.list.filter((item, index) => {
        return index !== action.index
      })
      return { ...state, list: arr }
    default:
      return state
  }
}

export default reducer

3.创建store

import { createStore } from 'redux'

import reducer from './reducer'

export default createStore(reducer)
  1. 表单添加数据
import React, { Component } from 'react'
import { connect } from 'react-redux'
class Form extends Component {
  state = {
    keyword: ''
  }
  handlerChange = (e) => {
    this.setState({ keyword: e.target.value })
  }
  handlerKeyUp = (e) => {
    if (e.keyCode === 13) {
      this.props.addItem(this.state.keyword)
    }
  }
  render() {
    return (
      <input
        type="text"
        value = { this.state.keyword }
        onChange = { this.handlerChange }
        onKeyUp = { this.handlerKeyUp }
        />
    )
  }
}

const mapDispatchToProps = dispatch => { // dispatch 是该函数的默认参数
  return {
    addItem (data) { // 可以在组件中通过 this.props.addItem(params)调用
      dispatch({
        type: 'ADD_ITEM',
        data
      })
    }
  }
}
// 如果不需要获取状态,第一个参数写为null
export default connect(null, mapDispatchToProps)(Form)

5.遍历数据以及删除数据

import React, { Component } from 'react'
import { connect } from 'react-redux'
class List extends Component {
  removeData = (index) => {
    return () => {
      this.props.removeItem(index)
    }
  }
  // removeData = () => {
  // }
  render() {
    return (
      <ul>
        {
          this.props.list.map((item, index) => (
            <li key = { index }>
              { item }
              <button onClick = { this.removeData(index) }>删除</button>
              {/* <button onClick = { () => {
                this.removeData(index)
              } }>删除</button> */}

            </li>
          ))
        }
      </ul>
    )
  }
}

const mapStateToProps = state => { // state 就是全局的状态管理器
  return { 
    list: state.list // 组件中通过 this.props.list 获取到想要的数据
  }
}

const mapDispatchToProps = dispatch => {
  return {
    removeItem (index) {
      dispatch({
        type: 'REMOVE_ITEM',
        index
      })
    }
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(List)

7.为什一开始可以拿到初始化数据

观测 redux 源码,得知,自动调用一次dispatch

  // When a store is created, an "INIT" action is dispatched so that every
  // reducer returns their initial state. This effectively populates
  // the initial state tree.
  dispatch({ type: ActionTypes.INIT })
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元输出到当前时刻的隐藏状态。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元输出到当前时刻的隐藏状态。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值