Реагировать - на изменение компонента радиокнопки, обновить состояние компонента текстового поля - PullRequest
1 голос
/ 28 февраля 2020

У меня есть 3 компонента. Основной компонент с именем «XYZ», который содержит 2 других компонента с именами «RadioButton» и «Textbox». Мне нужно обновить состояние компонента Textbox (значение параметра 500) при изменении компонента RadioButton. Ниже мой код. Я новичок в разработке React. Любая помощь будет принята с благодарностью!

Основной компонент - XYZ.tsx

const XYZ = (props) => {
    let lossCapacityValues = [
        { value: "Average", text: "Average" },
        { value: "Medium", text: "Medium" }
    ];

    const lossCapacityChange = (event) => {
        let ele = $(event.target);
    };

    return (
        <div className="mel-box">
            <RadioButton groupName="radio-loss-type" selectedValue="2" items={lossCapacityValues} onChange={lossCapacityChange} />
            <TextBox value="1000" />
        </div>
    )
};

export default XYZ;

Дочерний компонент - 1- RadioButton.tsx

const RadioButton = (props) => {

    const onChange = (event) => {
        props.onChange && props.onChange(event);
    }

    return (
        <div>
            {
                props.items.map((i: { "text": string, "value": string }, index: number) => {
                    return (
                        <div key={index} className="radiobutton-option-div">
                            <input
                                className="radio-custom"
                                type="radio"
                                name={props.groupName}
                                value={i.value}
                                defaultChecked={i.value === props.selectedValue}
                                onChange={onChange}
                            />
                            <label className="radio-custom-label">
                                <span className="radio-custom-text">{i.text}</span>
                            </label>
                        </div>
                    )
                })
            }
        </div>
    );
};

export default RadioButton;

Дочерний компонент - 2- TextBox.tsx

const TextBox = (props) => { 
    const [state, setState] = React.useState({
        value: props.value
    });

    const handleChange = (evt) => {
        setState({ value: evt.target.value });
    };

    return (
        <React.Fragment>
            <div className="input-text">
                <input
                    type="text"
                    value={state.value}
                    onChange={handleChange}
                />
            </div>
        </React.Fragment>
    )

};

export default TextBox;

1 Ответ

1 голос
/ 28 февраля 2020

Это можно сделать, подняв состояние вверх из компонента TextBox в компонент XZY.

Рабочая демонстрация

В XYZ поместите обработчики состояния текста:

const XYZ = (props) => {

    const [textState, setTextState] = React.useState({
        value: 1000
    });

    const handleTextChange = (evt) => {
        setTextState({ value: evt.target.value });
    };

    ....
    ....

};

Передайте их как реквизиты:

<TextBox value={textState.value} onChange={handleTextChange} />

Измените ваш ввод, чтобы использовать их:

<input
    type="text"
    value={props.value}
    onChange={props.onChange}
/>

В вашем XYZ вы можете проверить выбранное значение радио и соответственно установить состояние текста.

const lossCapacityChange = (event) => {
    //let ele = $(event.target);
    if(event.target.value == 'Average'){
        setTextState({ value: 500 });
    }
};

Примечание: вам следует избегать использования jQuery в React, если для этого нет веских причин. React использует Virtual DOM, на который может повлиять jQuery.

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