Я не могу понять, почему ввод не обновляется с помощью MobX

Итак, я попытался использовать MobX с реакцией, но не могу понять, почему ввод не обновляет свое значение.

Это код, который я написал до сих пор:

@observer(['recipeStore'])
class App extends Component {
  render() {
    return (
      <input type="text" value={this.props.recipeStore.og} onChange={(e) => {this.props.recipeStore.og = e.target.value}}/>
    );
  }
}

class RecipeStore {
  @observable og;
  @observable style;

  constructor() {
    this.og = 1;
    this.style = {og_low: 1, og_high: 1, fg_low: 1, fg_high: 1, abv_low: 1, abv_high: 1};
  }

  @computed get fg() {
    if (!this.og) return '';
    return (((this.og - 1) * 0.25) + 1).toFixed(3);
  }

  @computed get abv() {
    if (!this.og) return '';
    return ((this.og - this.fg) * 131).toFixed(1);
  }
}

const recipeStore = new RecipeStore();

ReactDOM.render(
  <Provider recipeStore={recipeStore}>
    <App />
  </Provider>,
  document.getElementById('root')
);

person loop0    schedule 08.09.2016    source источник
comment
У меня работает. Напишите в консоли recipeStore.og и вы увидите, что значение обновилось. Попробуйте показать весь соответствующий код в вопросе вместо ссылки на внешний ресурс.   -  person Tholle    schedule 08.09.2016
comment
Я собираюсь просмотреть код позже и попытаться найти проблему. Спасибо!   -  person loop0    schedule 08.09.2016
comment
Я рефакторил свой код, чтобы он был как можно меньше, как вы сделали в корзине JS, я могу подтвердить, что RecipeStore получает обновления, но жизненный цикл компонента React не запускается после события onChange. Даже shouldComponentUpdate не запускается. Это странно.   -  person loop0    schedule 08.09.2016
comment
shouldComponentUpdate не будет запускаться для обновлений, запланированных MobX, так как это не позволит вам отменить обновление и ввести несогласованный компонент. (он будет работать для изменений свойств и вызовов setState)   -  person mweststrate    schedule 08.09.2016


Ответы (1)


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

Оказывается, проблема заключалась в том, что декоратор @observer работал неправильно.

Мне пришлось изменить свой babel.dev.js, чтобы плагин 'babel-plugin-transform-decorators-legacy' был первым в списке.

Я нашел подсказку здесь: https://github.com/mobxjs/mobx/issues/105#issuecomment-213356342

person loop0    schedule 08.09.2016