TypeError:state.getIn不是函数



我正在我的react项目上实现不可变,将其与redux一起使用,使用fromJS((函数(来自不可变库(使state成为不可变对象。在我的reducer文件中,一切都正常,我收到一个操作,我可以使用setIn((函数设置新值,我也可以使用getIn((功能访问状态。

但是,当我使用mapStateToProps从connect((函数获取状态时,即使console.log显示了一个明显不可变的对象,我也不能使用不可变的函数,比如这里的toJs((或getIn((。我总是收到这样的错误:TypeError: state.getIn is not a function

我的index.js文件

import React from 'react';
import { connect } from 'react-redux';
import { compose } from 'redux';
import PropTypes from 'prop-types';
import Button from '@material-ui/core/Button';
import { template as templateAction } from './actions';
import withReducer from '../../../reducer/withReducer';
import templateReducer from './reducer';
export const Template = ({ name, template }) => (
<Button onClick={template}>
{name}
</Button>
);
Template.propTypes = {
name: PropTypes.string.isRequired,
template: PropTypes.func.isRequired,
};
export const mapStateToProps = (state) => {
console.log('state is equal to', state);
return (
{
name: state.getIn(['templateReducer', 'name']),
});
};
export const mapDispatchToProps = (dispatch) => ({
template: () => dispatch(templateAction()),
});
export default compose(
withReducer('templateReducer', templateReducer),
connect(mapStateToProps, mapDispatchToProps),
)(Template);

控制台日志(状态(结果

控制台日志(状态(的结果

PS:当我不使用不可变状态时,一切都很好。

看起来mapStateToProps函数中的state是一个具有'templateReducer'属性的对象,该属性的值类型为Map

我对我的React知识有点生疏,但也许分享templateReducer的代码会有所帮助。

withReducer('templateReducer', templateReducer)与减速器功能有什么关系?

似乎是在将状态从reducer设置为键templateReducer,然后再将其发送给mapStateToProps函数。(也许??(

在使用不可变方法之前,更改此函数以访问State可能会删除错误。

export const mapStateToProps = (state) => {
console.log('state is equal to', state);
return (
{
name: state['templateReducer']?.getIn(['name']),
});
};

使用来自griddle-react而非react-redux的连接。

相关内容

  • 没有找到相关文章

最新更新