未触发Redux操作
未激发Redux操作更改象形文字 这是我定义动作和减速器的文件(redux/module/keyword.js): 我的根减速器:未触发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
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} />