Передача данных в родительский компонент

Я застрял в моем простом приложении infernojs v1.2.2 для передачи данных в родительский компонент, эта проблема может быть связана с машинописным текстом, потому что я получил ошибку для машинописного текста, которой нет (он имеет функцию распознавания реквизитов из родительского компонента).

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

Вот мой родительский компонент

import { linkEvent } from 'inferno';
import Component from 'inferno-component';


import Weight from './weight';

export class RatioAlcohol extends Component<Props, any> {
    constructor(props, context) {
        super(props, context);
         this.state = { weight: 65 };
    }
    setChangeWeight(instance, event) {
        instance.setState({ weight: event.target.value });
    }
    render(props){
        return (
                <div className="ratio-alcohol">
                    <Weight valueChanged={ linkEvent(this, this.setChangeWeight) } weight={ this.state.weight } />
                </div>
        );
    }
}

и там мой дочерний компонент:

import { linkEvent } from 'inferno';
import Component from 'inferno-component';

export default class Weight extends Component<Props, any> {
    constructor(props, context) {
        super(props, context);
        this.state = { weight: props.weight};
    }
    handleChangeWeight(instance, event) {
        instance.valueChanged.event();
    }
    render(props){
        return (
                <div className="weight">
                    <label for="WeightInput">What is your weight(Kg)?</label>
                    <input id="WeightInput" name="weight" type="number" value={ props.weight } onInput={ linkEvent(props, this.handleChangeWeight) } />
                </div>
        );
    }
}

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

Я использовал inferno-typcript-example в качестве основы для своего проекта, я не знаю, имеет ли это отношение к этой проблеме.

1 ответ

Решение

Итак handleChangeWeight подпись функции в Weight имеет 1-й параметр, например, это на самом деле ваш компонент props, Это должно быть что-то вроде

export default class Weight extends Component<Props, any> {
    constructor(props, context) {
        super(props, context);
        this.state = { weight: props.weight};
    }
    handleChangeWeight(props, event) {
        props.valueChanged(event);
    }
    render(props){
        return (
                <div className="weight">
                    <label for="WeightInput">What is your weight(Kg)?</label>
                    <input id="WeightInput" name="weight" type="number" value={ props.weight } onInput={ linkEvent(props, this.handleChangeWeight) } />
                </div>
        );
    }
}

и в RatioAlcohol вам не нужно связывать событие, скорее, если вам нужен доступ к экземпляру, вы должны связать свой обработчик

export class RatioAlcohol extends Component<Props, any> {
    constructor(props, context) {
        super(props, context);
        this.state = { weight: 65 };
        this.setChangeWeight = this.setChangeWeight.bind(this)
    }
    setChangeWeight(event) {
        this.setState({ weight: event.target.value });
    }
    render(props){
        return (
                <div className="ratio-alcohol">
                    <Weight valueChanged={ this.setChangeWeight } weight={ this.state.weight } />
                </div>
        );
    }
}

Другие вопросы по тегам