React Context API - компонент рендеринга при изменении контекста без переноса рендера в потребителя - PullRequest
0 голосов
/ 01 января 2019

Я использую this.context для получения данных контекста внутри методов жизненного цикла, но когда я не оборачиваю компонент с помощью Consumer, тогда, когда изменяются данные контекста, мой компонент не перерисовывается.

Поэтому вместоэто:

render() {
        console.log('companies render');
        const { modal, singleCompanyData, loading } = this.state;
        const { itemsPerPage } = this.props;
        const columns = [
            { key: 'id', title: 'ID' },
            { key: 'title', title: 'Title' },
            { key: 'city', title: 'City' },
            { key: 'btn', title: 'Action' }
        ];
        return (
            <SharedDataConsumer>
                {({ companies }) => (
                    <React.Fragment>
                        <Companies
                            columns={columns}
                            data={companies}
                            addCompany={this.addCompany}
                            totalRecords={companies.length}
                            loading={loading}
                            itemsPerPage={itemsPerPage}
                        />
                        <AM2Modal open={modal} handleModalClose={this.handleModalClose}>
                            <CompaniesEdit
                                singleCompanyData={singleCompanyData}
                                handleModalClose={this.handleModalClose}
                                inputChangeEvent={this.inputChangeEvent}
                            />
                        </AM2Modal>
                    </React.Fragment>
                )}
            </SharedDataConsumer>
        );
    } 

Мне нужно использовать что-то вроде этого, чтобы отформатировать эти данные перед рендерингом:

render() {
        console.log('companies render');
        const { modal, singleCompanyData, loading } = this.state;
        const { companies } = this.context;
        const { itemsPerPage } = this.props;
        const newComp = companies.map(value => ({
           ...value,
           btn: this.actionBtns(value.id)
        }));
        const columns = [
            { key: 'id', title: 'ID' },
            { key: 'title', title: 'Title' },
            { key: 'city', title: 'City' },
            { key: 'btn', title: 'Action' }
        ];
        return (
            <React.Fragment>
                <Companies
                    columns={columns}
                    data={newComp}
                    addCompany={this.addCompany}
                    totalRecords={companies.length}
                    loading={loading}
                    itemsPerPage={itemsPerPage}
                />
                <AM2Modal open={modal} handleModalClose={this.handleModalClose}>
                    <CompaniesEdit
                        singleCompanyData={singleCompanyData}
                        handleModalClose={this.handleModalClose}
                        inputChangeEvent={this.inputChangeEvent}
                    />
                </AM2Modal>
            </React.Fragment>
        );
    }

Но таким образом, компонент не обновляется после изменения контекста -контекстные данные асинхронны.

Я провел исследование и увидел этот пример, в котором они переносят экспорт и передают данные контекста как реквизиты, но не уверены, правильно ли это работает с последним API контекста?

Полный код здесь.

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