@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>	
		    )
	}
}
  • Вопрос задан
  • 1181 просмотр
Пригласить эксперта
Ответы на вопрос 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 компонента
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы