我用简单的reducer创建了一个简单的商店。然后我有store = createStore(rootReducer)
。一切都非常简单。现在,我只想像这样连接该组件。
import React from 'react';
import { connect } from 'react-redux';
import Text from './Text';
const User = ({ name, surname }) => (
<div className='user'>
<Text name={name} surname={surname} />
</div>
);
const mapStateToProps = state => {
return {
name: state.name,
surname: state.surname
};
};
const Connected = connect(mapStateToProps)(User);
export default Connected;
但是我不断收到错误消息:
Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
我真的不知道我在做什么错。唯一的事情是父组件就是这样
<Parent>{this.props.children}</Parent>
孩子将是我连接的组成部分。这里没什么错或新的,但是让我发疯,有什么主意吗? 我更新为React:16.8和React-redux 7.0
谢谢
编辑:如果我在没有连接的情况下导出组件,事情就会变得更奇怪
export default Titles
然后它起作用了!!我不知道我做错了什么。
如果我仅导出export default User
之类的组件,它将起作用,并且如果我输入了typeof User,我将获得功能。
如果我使用connect Connected = connect()(User)
导出,则失败,Connected的类型为Symbol.react.memo
我知道有些愚蠢的东西,但这确实让我发疯。请帮忙! :D
编辑: 好的,仍然疯狂xD我看到用connect()(Comp)导出的组件不起作用,但是如果我使用Connected = connect()(Comp),然后在JSX中,它就可以工作!我在做什么错了?
答案 0 :(得分:1)
好的,我找到了解决方案,并希望与遇到相同问题的所有人分享。 如果要使用redux并使用connect()(Comp)导出组件,则必须注意,最新版本的redux connect使用React.memo和Hooks,因此必须更新所有依赖项。
我的问题是我使用的是旧版本的react-dom和react(不是很旧的tbh),我删除了node文件夹并将所有依赖项更新为最新版本,现在它可以正常工作。
如果您想了解技术原因:
新连接返回对象$$ typeof:React.memo,旧版本不支持。由于这篇帖子in github,我找到了解决方案。