2016-09-07 2 views
1

Я некоторый код, который выглядит следующим образом:код после отправки() не выполняется

Reducer:

const foo = (bar) => { 
    console.log("here"); 
    return { 
    type: "FOO", 
    bar 
    } 
} 

Внутри Render() контейнера

console.log(1); 
console.log(this.props.dispatch); 
console.log(foo); 
this.props.dispatch(foo(
    {a: 1, b: 2} 
)); 
console.log(2); 

Выход, который я вижу в Хром, составляет:

1 
<dispatch function> 
<my foo reducer function> 
here 

Обратите внимание, что отсутствует 2. У меня нет ошибок, нет перенаправления, нет ничего. Выполнение кода просто прекращается после вызова dispatch().

Любые предложения, как я мог отлаживать это или идеи, в чем проблема?

+0

Я пока не могу сказать, почему, но если вы ошибаетесь, звоните по расписанию прямо в середине события рендеринга. Обычно отправка происходит в ответ на событие пользовательского интерфейса от пользователя. Я не мог быстро найти что-либо, что доказывает его неправильность, хотя это просто мысль. – GreenAsJade

+1

Теперь я думаю об этом еще несколько - если вы вызываете отправку, тогда реакция должна обновить реквизит и повторную визуализацию. Возможно, у вас есть зависание там, где он ждет завершения рендеринга, но он не может завершить, потому что он ждет ... – GreenAsJade

+0

@GreenAsJade Это была проблема :) – alexandernst

ответ

1

Для записи :)

Вы не можете позвонить dispatch() в render().

(Потому что если вы это сделаете, ваши реквизиты будут обновлены, поэтому в середине текущего будет вызван новый рендеринг. Это будет либо зависание (ожидание), либо бесконечная рекурсия. повесьте трубку!)

+0

Возможно, интересная сноска заключается в том, что если вы будете следовать за компонентом/контейнером шаблон, вы теоретически никогда не будете «отправлять» в 'render', потому что контейнеры' dispatch' и компоненты 'render'. Я не смог на самом деле реализовать это чисто, но это тема для другого дня! – GreenAsJade

Смежные вопросы