View не хочет перерисовывать после того, как в Redux вызывается отправка магазина (React)

Мне нужно изменить значение ввода текста после изменения состояния в redux (повторно отобразить представление). Это означает, что все, начиная с ввода текста, будет храниться в хранилище redux (после каждого символа) и повторно отображаться на ввод. Если я использую setState без redux, вид будет успешно изменен, но также, если я использую метод this.forceUpdate() для принудительного повторного рендеринга в функции handleChangeEvent.

Я думаю, это проблема того факта, что это состояние в редукторе не изменяется должным образом. Я искал много способов сделать это, но у меня ничего не работало.

Сокращенный код здесь:

'use strict';

import * as React from "react";
import { createStore } from 'redux';

interface State
{

}

interface Props
{

}

function cardReducer(state = {redirect : false, cardId : ""}, action) {
    console.info("reducer action: " + JSON.stringify(action));
    switch (action.type) {
        case 'TYPING':
            return  Object.assign({}, state, {
                redirect : false,
                cardId : action.cardId
            });            

        default:
            return state
    }
}

const store = createStore(cardReducer);
console.info("STORE state: " + JSON.stringify(store.getState()));

export class Home extends React.Component<Props, State> {

    constructor(props : any)
    {
        super(props);
    }

    handleChangeEvent = (e) => {
        store.dispatch({ type : 'TYPING', cardId : store.getState().cardId + e.target.value});

    };



    render()
    {                
         return (
                <div className = {"container cardwrapper offset-md-2 col-md-8"}>
                    <form>
                        <input value = {store.getState().cardId} onChange = {this.handleChangeEvent} id = {"card_id"} className = {"command"} type = "text" autoFocus autoComplete = {"off"}/>
                    </form>
            );
        }
    }

}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 004
2

Ответы 2

Вам не хватает connect и mapStateToProps (эти два в Google). Выполнение store.getState() в компоненте - это не то, как React прослушивает обновления.

он не использует библиотеку response-redux, и эти вспомогательные методы предоставляются этой библиотекой

Jatin Gupta 06.04.2018 20:10

Ну да, но он должен.

timotgl 06.04.2018 20:27

Я попробую это. Спасибо.

Michael Motúz 06.04.2018 21:20

После получения данных из store.getState () вам необходимо также установить их в своем состоянии, чтобы ваш компонент был повторно отрисован.

Сделать это можно следующим образом:

  1. Поместите cardId в свое состояние внутри конструктора следующим образом:

    this.state { cardId: "" }

  2. Затем при получении обновления из магазина установите состояние как:

    this.setState ({ cardId: store.getState (). cardId; });

Другие вопросы по теме