我一直在关注ReduxJS文档:Usage with React

在文档末尾提到了提供者对象的用法,我将我的应用程序组件包装在提供者中,如下所示:

import React from 'react'
import ReactDOM from 'react-dom'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import RootReducer from './app/reducers'
import App from './app/app'

const store = createStore(RootReducer)

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

然而,这就是文档的结尾.如何在组件中提取供应商提供的存储?

推荐答案

通过组件访问store 的最佳方式是使用connect()函数as described in the documentation.这允许您将状态和操作创建者映射到组件,并在store 更新时自动传递它们.此外,默认情况下,它将以this.props.dispatch的形式传入dispatch.以下是文档中的一个示例:

import { connect } from 'react-redux'
import { setVisibilityFilter } from '../actions'
import Link from '../components/Link'

const mapStateToProps = (state, ownProps) => {
  return {
    active: ownProps.filter === state.visibilityFilter
  }
}

const mapDispatchToProps = (dispatch, ownProps) => {
  return {
    onClick: () => {
      dispatch(setVisibilityFilter(ownProps.filter))
    }
  }
}

const FilterLink = connect(
  mapStateToProps,
  mapDispatchToProps
)(Link)

export default FilterLink

请注意,connect实际上创建了一个新组件,它围绕着现有组件!这种模式被称为Higher-Order Components,通常是在React中扩展组件功能的首选方式(在继承或混合等方面).

由于它有相当多的性能优化,并且通常不太可能导致错误,Redux开发人员几乎总是建议使用connect而不是直接访问存储——然而,如果你有very个很好的理由需要较低级别的访问,Provider组件会使其所有子代都可以通过this.context访问存储:

class MyComponent {
  someMethod() {
    doSomethingWith(this.context.store);
  }
}

Reactjs相关问答推荐

为什么该州在一种情况下没有更新,而在另一种情况下却更新?

使用Thattle和Use Effect setTimeout进行搜索有什么不同

从Microsoft Excel粘贴复制的单元格时,将Excel单元格格式(粗体、下划线、斜体)带入Reaction

面对动画警告:未指定`useNativeDriver`.这是必需的选项,并且必须在REACT本机中显式设置为`true`或`False`

如何使我的代码可以接受我想要的每一个链接

如何在React组件中自动更新图表数据?

React Todo List 应用程序我在实现删除功能时遇到问题

尽管所有页面在 Reactjs 中都是公开的,但始终导航到特定页面

在 React 中使用forwardRef时无法声明自定义属性

React 组件列表中的第一个计时器正在获取值 NaN

Formik onChange() 字段挂钩覆盖显示值和 Select 机制

为嵌套路由配置一个不存在的 url 的重定向

如何在react 中正确销毁上下文?

需要在窗口调整大小时更新 React 组件

从其他组件切换 FieldSet

如何禁用来自 React Native API 的某些特定项目的可touch 不透明度

React 中的 Slide API Mui 在开始而不是结束时触发侦听器

如何解决在 react.js 中找不到模块错误

当我在其中传递 2 个箭头函数时,为什么我的 onClick 事件不适用于 useState

当父组件重新渲染时做出react ,我失go 了子状态.我错过了什么?