Redux `connect ()` возвращает объект - PullRequest
0 голосов
/ 02 июня 2019

Я использую эти библиотеки:

react: 16.8.6
redux: 4.0.1
react-redux: 7.0.3

У меня есть простой компонент (Typescript):

import ...;  
import { connect } from 'react-redux';

class ExampleComponent extends React.PureComponent<IProps, {}> {
    constructor(props: any) {
        super(props);
    }

    public render() {
        return (
            <div>
                {this.props.name}
            </div>
        );
    }
}

interface IProps{
    name: string;
}

const mapStateToProps = (state) => {
    return {
        name: state.name
    };
}

export default connect(mapStateToProps)(ExampleComponent);

И у меня есть родительский компонент:

import ExampleComponent from './ExampleComponent';

export default class App extends React.PureComponent<{}, {}> {
    constructor(props: any) {
        super(props);
    }

    public render() {
        return (
            <div>
                <ExampleComponent />
            </div>
        );
    }
}

По какой-то причине connect(mapStateToProps)(ExampleComponent) возвращает объект вместо компонента React. Я получаю сообщение об ошибке:

Uncaught Ошибка: Инвариантное Нарушение: Неверный тип элемента: ожидается строка (для встроенных компонентов) или класс / функция, но получили: object

enter image description here

Также, когда я пытаюсь сделать console.info(typeof connect(mapStateToProps)(ExampleComponent)), он печатает только object на консоль.

Как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 03 июня 2019

на первый взгляд кажется, что проблема в том, что {this.props.name}, как ожидается, будет строкой и получит объект по какой-то причине.

, пожалуйста, попробуйте утешить 'name'

render() {
 const { name } = this.props
 console.log('name', name)

 return (
  //
 )
}

весьма вероятно, что это проблема.

0 голосов
/ 04 июня 2019

Я нашел проблему.Это была react-dom библиотека.Он был ошибочно установлен на 16.4.XX, тогда как redux-dom connect использует метод React.meme(), который может вернуть объект.Но react-dom 16.4.XX не знает, как обращаться с такими объектами.

Обновление до react-dom 16.8.XX решило проблему.

0 голосов
/ 02 июня 2019

Может быть, вы пропали без вести

import {connect} from 'response-redux';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...