Очень странная вещь в диспетчерской функции в реаги-редуксе - PullRequest
0 голосов
/ 26 апреля 2020

моя функция mapstatetoprop использует состояние "store" и отображение страницы. но когда я отправляю напрямую в редуктор, переопределяю текущее состояние и ничего не возвращаю "неопределенный", страница все равно отображается, как будто я не изменил состояние "становиться неопределенным". Но вот интересная вещь, которую я добавил консоль, журнал (состояние) в mapstatetoprop (состояние), и он действительно печатает неопределенные, но после монтирования страницы (1-й случай).

, поэтому я пытаюсь добавить setTimeout в функцию отправки ( 2-й случай) или привязать его к странице прекращения работы события (3-й случай)

const mapStateToProps = (state)=>{
    console.log("mystate : ", state);
    return {searchField :state.searchField }
}

const mapDispatchToProps =(dispatch)=>{
    dispatch({type : "test"});
 --> " (1st case) console print state : undefined after didmount function run"

//commented   setTimeout(()=>{dispatch({type : "test"});},3000); 
--> "page gets error after 3 sec(2nd case)"

    return {
             onchange : (event)=> dispatch(setSearchField(event.target.value))
//commented       ,  test : ()=> {dispatch({type : "test"}); console.log("test");}
 -->" (3rd case) page gets error aftet trigger its event"
           }

}

функция myreducer

const intialState = {
    searchField : '' 

}

export const searchRobots = (state = intialState , action={})=>{

    switch(action.type){
        case "CHANGE_SEARCH_FIELD" :
            return Object.assign({} , state ,{searchField : action.payload}  );

        case "test":
            break;

        default :

             return state ;

    }
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Не отправляйте прямо внутрь mapDispatchToProps, вы делаете что-то вроде этого:

const mapDispatchToProps = (dispatch) => ({
    fetchUserDetails : () => dispatch(yourAction(value))
});

Теперь fetchUserDetails будет доступно внутри реквизита как функция, так что вы можете деструктурировать его из this.props и вы используете его где угодно, как:

const { fetchUserDetails } = this.props;
fetchUserDetails();
1 голос
/ 27 апреля 2020

Вы не можете вызывать диспетчеризацию внутри mapDispatchToProps. Вы должны возвращать только функции, после вызова которых вы можете вызвать диспетчерскую функцию или вы можете использовать bindActionCreators, чтобы избежать непредвиденного поведения. Это только один правильный способ для предсказуемой работы редукса. Просто никогда не вызывайте диспетчеризацию внутри mapDispatchToProps

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