Задать вопрос
@vaskadogana
Frontend developer

Использование redux и store, как организовать вызов события по изменению состояния store?

нужно выполнить такую цепочку event > action > dispatch store > ?? > event > rerender
Там где знаки вопроса, не понимаю как реализовать
код постараюсь сделать максимально чистым

<form className="autorization_form">
class Languages extends React.Component{
		render() {
			return (
                                 <input 
                                          defaultValue = "ua"
		            	          onClick = {this.props.languageUpdate}
	   			 />
   		)
	   }
	};

var EAction = {
 LANGUAGE_UPDATE           : "LANGUAGE_UPDATE"
}
function reducer(state = { language : ""}, action) {
              case EAction.LANGUAGE_UPDATE:
	      	       return {
	       		     ...state,
	       		   language:  action.language,
               	      };   
 	      default:
	         return state;
	   }
	}
function languageUpdate(event){
		return {
	             type : EAction.LANGUAGE_UPDATE,
	             language : event.target.value, 
	   }   
}
var LanguagesController = connect(
		state =>({
			language : state.language
			}),
		dispatch => bindActionCreators({
			languageUpdate,
		}, dispatch)
)(Languages, FormAuthView)
var store = createStore(reducer, applyMiddleware(thunk));

мне нужно чтобы отработала эта функция setLanguage(),
не могу понять как заставить ее отработать по обновлению state.language</b>
function setLanguage(state){
					  state = store.getState();
					  var lang = state.language;	
			  		  language_variant.setLanguage(lang);
			  		  alert('languge was setup');
};

и произошел ререндер этого компонента ну или вообще любого (но это уже следующий вопрос))))
export default class Form extends React.Component{
	render(){
		return(
			<div>
				<div id="form_container">
					<Provider store = {store}>
						<FormAuthController/>
			      	</Provider>
			    </div>
			    <div className="languages_icon">
			      	<Provider store = {store}>
		     			<LanguagesController />
		     		</Provider>
			    </div>  
			    </div>	
		    )
	}
}
  • Вопрос задан
  • 1192 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@frozen_coder
Java-developer
мне нужно чтобы отработала эта функция setLanguage(),
не могу понять как заставить ее отработать по обновлению state.language


Изучите жизненный цикл компонента. Если я всё правильно понял. Вам нужен метод компонента componentWillReceiveProps(nextProps) - там прописывайте всё, что делается при поступлении новых props. новый language придет к вам в nextProps, когда он изменится в Store, ибо вы же сделали connect.
Ваши функции сделайте методами класса, иначе они как-то оторваны от компонента, хотя используют его state. Посмотрите в сторону более современного синтаксиса в React и ES6, как минимум var уже не комильфо)
https://facebook.github.io/react/docs/react-compon...
Ответ написан
Комментировать
@vaskadogana Автор вопроса
Frontend developer
чтобы выполнить какое то событие по обновлению redux хранилища используйте функию subscribe()

store.subscribe(() =>
console.log(store.getState()) - событие которое должно произойти
)
store - название хранилища
Буду искать дальше как инициировать rerender компонента
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽