首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从redux store传递道具

如何从redux store传递道具
EN

Stack Overflow用户
提问于 2020-10-24 03:05:14
回答 2查看 168关注 0票数 0

我有一个简单的应用程序,使用redux和react-router。我将我的应用程序组件包装在一个提供者标签中,以便它可以访问商店。我(在App.js中)在App.js中连接了mapStateToProps和mapStateToDispatch。我不确定如何将在App.js中定义的函数传递给子组件,因为我正在使用路由。我试着做渲染技巧,但它不起作用。如果我可以将它传递给CelebrityPage组件,我将如何在文件中接收它?任何帮助都将不胜感激。

这是我的App.js

代码语言:javascript
复制
import React, { Component } from 'react';
import { connect } from 'react-redux'
import './App.css';
import Clarifai from 'clarifai'

// import Particles from 'react-particles-js';
// import particlesOptions from './particleOptions'
import { Signin } from './components/signin/Signin';
import Register from './components/register/Register';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'

import { setSearchField } from './context/Actions'
import FacePage from './Containers/FacePage';
import CelebrityPage from './Containers/CelebrityPage';
import ControllerPage from './Containers/ControllerPage';

const mapStateToProps = state => {
  return {
    input: state.input
  }
}

const mapDispatchToProps = (dispatch) => {
  return {
    handleSearchChange: (event) => dispatch(setSearchField(event.target.value))
  }
}
...
 render() {

    return (<Router>
      <Switch >
        <Route path='/celebrity' exact render={props => <CelebrityPage{...props} handleSearchChange={this.handleSearchChange} />} />
        <Route path='/' exact component={Register} />
        <Route path='/signin' exact component={Signin} />
        <Route path='/contoller' exact component={ControllerPage} />
        <Route path='/face-detection' exact component={FacePage} />
      </Switch>
    </Router>)
  }

}


export default connect(mapStateToProps, mapDispatchToProps)(App)
EN

回答 2

Stack Overflow用户

发布于 2020-10-24 03:35:44

如果你打算将存储操作和状态传递给子组件,这意味着你拒绝使用redux的优点。最好的方法应该是将需要访问操作或状态的任何组件连接到存储。在根组件级别进行连接并将道具传递给子组件不是一个好的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2020-10-24 03:39:24

我认为robert所说的就是你可能想要做的。不要试图在你的<Route>中传递你的道具。取而代之的是在CelebrityPage组件中执行connect mapDispatchToPropsmapStateToProps

一旦您在Celebrity Page组件中完成了包装,您就应该可以访问您定义的属性和函数。

代码语言:javascript
复制
... 
// keep all the previous imports from your App.Js
 render() {

// have your router like this
    return (<Router>
      <Switch >
        <Route path='/celebrity' exact component ={CelebrityPage} />
        <Route path='/' exact component={Register} />
        <Route path='/signin' exact component={Signin} />
        <Route path='/contoller' exact component={ControllerPage} />
        <Route path='/face-detection' exact component={FacePage} />
      </Switch>
    </Router>)
  }
}
export default App

名人页面示例

代码语言:javascript
复制
import React from 'react'
import { connect } from 'react-redux'
class CelebrityPage extends React.Component {
  
// put your mapStateToProps and mapDispatch function heres instead of app.js

mapStateToProps() {

}
mapDispatchToProps {
 // bind your handlesearch function to props here
}
 render() {
   return (
  <div>
    <input />
    <button onClick={this.props.handleSearchChange}/>
  </div>
  )
 }
}
export default connect(mapStateToProps, mapDispatchToProps)(CelebrityPage)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64505939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档