Мне нужно изменить значение ввода текста после изменения состояния в 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>
);
}
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам не хватает connect и mapStateToProps (эти два в Google). Выполнение store.getState() в компоненте - это не то, как React прослушивает обновления.
Ну да, но он должен.
Я попробую это. Спасибо.
После получения данных из store.getState () вам необходимо также установить их в своем состоянии, чтобы ваш компонент был повторно отрисован.
Сделать это можно следующим образом:
Поместите cardId в свое состояние внутри конструктора следующим образом:
this.state { cardId: "" }
Затем при получении обновления из магазина установите состояние как:
this.setState ({ cardId: store.getState (). cardId; });
он не использует библиотеку response-redux, и эти вспомогательные методы предоставляются этой библиотекой