未触发Redux操作

未触发Redux操作,redux,material-ui,Redux,Material Ui,未激发Redux操作更改象形文字 这是我定义动作和减速器的文件(redux/module/keyword.js): 我的根减速器: import { combineReducers } from 'redux' import { routerReducer as router } from 'react-router-redux' import locale from './modules/locale' import errorMessage from './modules/error' im

未激发Redux操作更改象形文字

这是我定义动作和减速器的文件(redux/module/keyword.js):

我的根减速器:

import { combineReducers } from 'redux'
import { routerReducer as router } from 'react-router-redux'
import locale from './modules/locale'
import errorMessage from './modules/error'
import pictogramsKeyword from './modules/keyword'
export default combineReducers({
  locale,
  router,
  pictogramsKeyword,
  errorMessage
})
因此,使用devTools,我可以检查我的初始状态是否与我从rootReducer中预期的一样:

locale:"en"
router:{} 1 key
pictogramsKeyword:""
errorMessage:null
这是我连接到Redux商店的视图的代码。组件搜索框负责触发动作更改象形文字:

import React, {Component, PropTypes} from 'react'
import SearchBox from 'components/SearchBox.js'
import { connect } from 'react-redux'
import { changePictogramsKeyword } from 'redux/modules/keyword'


class SearchPictogramsView extends Component {

  handleDismissClick (e) {
    this.props.resetErrorMessage()
    e.preventDefault()
  }

  render () {
    const { children, inputValue } = this.props
    return (
      <div>
          <SearchBox value={inputValue} onChange={changePictogramsKeyword} />
          {children}
      </div>
    )
  }
}

SearchPictogramsView.propTypes = {
  inputValue: PropTypes.string.isRequired,
  children: PropTypes.node
}

function mapStateToProps (state, ownProps) {
  return {
    errorMessage: state.errorMessage,
    inputValue: state.pictogramsKeyword
  }
}

export default connect(mapStateToProps, {
  resetErrorMessage, changePictogramsKeyword
})(SearchPictogramsView)
import React,{Component,PropTypes}来自“React”
从“components/SearchBox.js”导入SearchBox
从“react redux”导入{connect}
从'redux/modules/keyword'导入{changePictogramsKeyword}
类搜索象形图视图扩展组件{
手语(e){
this.props.resetErrorMessage()
e、 预防默认值()
}
渲染(){
const{children,inputValue}=this.props
返回(
{儿童}
)
}
}
搜索象形图View.propTypes={
inputValue:PropTypes.string.isRequired,
子项:PropTypes.node
}
函数mapStateToProps(状态,ownProps){
返回{
errorMessage:state.errorMessage,
输入值:state.pictogramsKeyword
}
}
导出默认连接(MapStateTops{
重置错误消息,更改象形图
})(搜索象形图视图)
这是SearchBox组件的代码。自动完成是一个材质ui组件。每次我按下一个键,都会触发onUpdateInput方法,但是并没有触发changePictogramsKeyword(我在开发工具中看不到任何东西)

import React,{Component,PropTypes}来自“React”
从“物料界面/库/自动完成”导入自动完成
从“物料ui/lib/raised按钮”导入RaisedButton
类SearchBox扩展组件{
建造师(道具){
超级(道具)
this.handleUpdateInput=this.handleUpdateInput.bind(this)
}
handleUpdateInput=(t)=>{
console.log(t)
this.props.onChange(t)
}
渲染(){
返回(
)
}
}
SearchBox.propTypes={
值:PropTypes.string.isRequired,
onChange:PropTypes.func.isRequired
}
导出默认搜索框

现在,您的操作只会被调用,而不会被调度,因为您在
connect()调用中没有正确映射操作。(有关更多信息,请参阅)

搜索象形图视图
中,更改
connect()
调用的
mapDispatchToProps
函数,以返回包含包装函数的对象:

export default connect(mapStateToProps, (dispatch) => {
  return {
    resetErrorMessage: () => dispatch(resetErrorMessage()),
    changePictogramsKeyword: () => dispatch(changePictogramsKeyword())
  };
})(SearchPictogramsView)
您也可以通过使
mapDispatchToProps
具有自己的功能来清理它:

function mapDispatchToProps(dispatch) {
  return {
    resetErrorMessage: () => dispatch(resetErrorMessage()),
    changePictogramsKeyword: () => dispatch(changePictogramsKeyword())
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(SearchPictogramsView)

让我知道这是否有效

它确实在文档中:

如果传递了一个对象,则假定其中的每个函数都是 Redux操作创建者。具有相同函数名的对象,但 将每个动作创建者包装到分派调用中,以便 直接调用,将合并到组件的道具中

当我写道:

<SearchBox value={inputValue} onChange={changePictogramsKeyword} />

现在是:

<SearchBox value={inputValue} onChange={this.props.changePictogramsKeyword} />


因此,我真的呼吁派遣行动,而不仅仅是行动

你的代码不能解决这个问题。我觉得我写的也没问题。connect方法中的第二个参数是一个对象……从文档中可以看出:如果传递了一个对象,那么其中的每个函数都将被假定为Redux操作创建者。一个具有相同函数名的对象,但每个动作创建者都封装在一个分派调用中,因此可以直接调用它们,将合并到组件的props中url:TIL,my bad。我不知道这有用,很高兴你找到了解决办法!
<SearchBox value={inputValue} onChange={changePictogramsKeyword} />
<SearchBox value={inputValue} onChange={this.props.changePictogramsKeyword} />