Как установить значение по умолчанию в состояние из префикса или поля ввода

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня проблема в форме редактирования, я должен отобразить код страны из api в поле ввода (префикс). после отображения мне нужно получить это значение и установить его в состояние. Я получаю значение из поля ввода (префикс), когда когда-либо выполняется onchange, но мне нужно значение без onchange.Я имею в виду все, что мне нужно в выпадающем списке, чтобы получить это значение. Мне нужно отобразить код страны независимо от того, что я отправил с помощью формы. Затем, если пользователю необходимо изменить код страны, он выберет страну. На основе выбора страны мне нужно отобразить код страны и установить для него значение state. Надеюсь, вы поймете мой вопрос…

Вот мой код…..

 const [countryCode, setcountryCode] = useState([]) // I am setting Api data into this state

const [subscriber, setSubscriber] = useState({  // here I am getting data what ever I sent to backed...
countryCode: "",

)}
                     
                       <Form.Control 
                                className='add_option' 
                                 type='text' 
                                  name='CountryCode'
                                 onChange={handleChange} 
                                   as="select" required  >
                                           
                                            {
                                                countryCode.map((codes, idx) => (
                                                    <option
                                                        key={idx}
                                                        required
                                                        name='CountryCode'
                                                        className='add_opt'
                                                        value={codes.CountryCode}
                                                          defaultValue={codes.CountryCode}
                                                    >
                                                        {codes.countryCode1}

                                                    </option>

                                                ))
                                            }

                                        </Form.Control>   
 

Заранее спасибо…..

Ответ №1:

Вы должны думать наоборот:
не «получать значение из поля ввода», а вместо этого сохранять текущее значение с useState помощью и устанавливать Form.Control значение с помощью, например value={ currentCountryCode } .

См.: контролируемые компоненты.

onChange Устанавливает состояние (например setCurrentCountryCode() ), а Form.Control возвращает значение из состояния.

Затем любое другое событие также может установить состояние ( setCurrentCountryCode() ), любая другая функция может использовать текущее состояние ( currentCountryCode ) .

Например.:

 import React, { useEffect, useState } from 'react';
import Form from 'react-bootstrap/Form';

export const SelectValue = () => {
    const [ currentCountryCode, setCurrentCountryCode ] = useState(''); // <-- store selected value in state
    const [ countryCode, setcountryCode ] = useState([
        { countryCode: 'xx' },
        { countryCode: 'yy' },
        { countryCode: 'zz' },
    ]);

    const handleChange = function( x ){
        setCurrentCountryCode(x.target.value) // <-- set state by selected value
    };

    useEffect(()=>{
        /*
        fetchCurrentCountryCode().then((value)=>{  // <-- maybe fetch the current value, or something
            setCurrentCountryCode( value )         // <-- set state by fetched value
        })
        */
    }, []);

    useEffect(()=>{
        console.log('currentCountryCode:', currentCountryCode); // <-- do what ever you want with most recent value
    }, [ currentCountryCode ]);

    return (<>
        <Form.Control
            type='text'
            onChange={ handleChange }
            as="select"
            value={ currentCountryCode } // <-- set the value from state
        >
            {
                countryCode.map((codes, idx) => (
                    <option
                        key={ idx }
                        value={ codes.countryCode }
                    >
                        { codes.countryCode }
                    </option>
                ))
            }
        </Form.Control>
    </>);
};