当前位置: 首页 > 面试题库 >

如何在React中使用Redux的Provider

朱毅
2023-03-14
问题内容

我一直在这里关注ReduxJS文档:React的用法

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

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')
)

但是,这就是文档的结尾。如何在组件内提取提供商提供的商店?


问题答案:

通过组件访问商店的最佳方法是使用connect()功能,如文档中所述。这使您可以将状态和动作创建者映射到您的组件,并在商店更新时自动将它们传递给他们。此外,默认情况下,它将dispatch作为传入this.props.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实际上创建了一个新组件,将您现有的组件包裹起来!这种模式称为高阶组件,通常是在React中扩展组件功能的首选方法(优于继承或mixins之类的东西)。

由于有它不少性能优化,一般是不太可能导致错误的终极版开发者几乎总是建议使用connect在直接访问商店-但是,如果你有一个 非常
充分的理由需要更低级别的访问权限,该Provider组件使得因此所有子公司都可以通过以下方式访问商店this.context

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


 类似资料:
  • 和 Flux 类似,Redux 也是需要注册一个回调函数 store.subscribe(listener) 来获取 State 的更新,然后我们要在 listener 里面调用 setState() 来更新 React 组件。 Redux 官方提供了 react-redux 来简化 React 和 Redux 之间的绑定,不再需要像 Flux 那样手动注册/解绑回调函数。 接下来看一下是怎么做到

  • 我正在使用反应和电子构建桌面应用程序。由于它增长迅速,我意识到我需要某种状态管理,如Redux,以避免在组件之间传递许多属性。我开始阅读Redux官方留档,但仍然不知道如何在我的情况下实现它。我卡住了! 例如,我有一个呈现许多子组件的主组件。其中一个有按钮。点击后,它应该向商店发送一个“事件”,以便主可以执行相应的操作。我怎样才能做到这一点?我找不到事件的概念,我已经在如何开始使用Redux上碰壁

  • 问题内容: 在我的组件中,我具有以下内容: 不调用取消订阅会导致以下错误: 警告:setState(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是无人值守。 我想知道的是我应该分配给它,还是有更好的分配空间? 问题答案: 正如Salehen Rahman在上面的评论中提到的,我最终还是使用react-redux。 根据他们的文档,我创建了两个函

  • 问题内容: 我才刚开始做出反应,我有点迷茫。我正在尝试制作一个登录页面并发出一个http发布请求。现在,我只是想使任何类型的HTTP请求都能正常工作,所以我使用了请求bin,并在文档中找到了针对npm软件包的这一基本操作(https://www.npmjs.com/package/redux -react-fetch ): 那么,写完一个动作之后,我该怎么办?我实际上如何让我的应用程序调用并使用该

  • 问题内容: 我正在尝试使用React refs在安装时聚焦Redux-Form字段。 当我尝试时,会抛出一个错误: 当我console.log this.refs时,它通常是一个空对象,有时将’title’标识为ref,但它不是可靠的。 我是否正确使用了引用?我的代码在下面供参考。 … 问题答案: 请尝试使用回调函数设置ref: 然后使用它来获取基础的DOM节点: DOM输入元素是否包装在另一个元

  • 我试图结合反应路由器v4,反应,和redux。因为react-router跟踪URL,所以我选择将该状态块排除在redux模型之外。 但我仍然需要一种方法来在react路由器发生路由更改时调度redux操作。哪里是最好的地方? 我的第一次尝试是将它放在react路由器链接的onClick属性中: 其思想是,当用户单击链接时,dispatchAction()将更新redux状态,然后加载相册组件。