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

#reactjs #react-hooks

#reactjs #реагирующие крючки

Вопрос:

На этой странице написано «Единственный аргумент для useState() Hook — это начальное состояние.»

Я интерпретирую это как означающее, что useState принимает один аргумент, и этот аргумент является начальным состоянием. Это кажется неправильным, поэтому мой вопрос в том, как мне установить начальное значение переменной состояния? В следующей строке кода message всегда есть пустая строка, даже если я устанавливаю для нее допустимое строковое значение.

 const [message, setMessage] = useState(props.message);
  

В моем диалоговом окне хост-компонент передает строку ( props.message ). Я хочу присвоить эту строку переменной состояния ( message ), а затем назначить message пустую строку, когда пользователь захочет закрыть диалоговое окно.

Dialog.tsx

 function Dialog(props: any) {
    var dummy = props.message;                                 // "foo"
    const [message, setMessage] = useState(props.message);     // set initial state     
    dummy = message;                                           // "" - expected "foo"

    const handleClose = () => setMessage('');

    return (
        <>
            <Modal show={message.length > 1} onHide={handleClose}>
                <Modal.Header closeButton>
                    <Modal.Title>Information</Modal.Title>
                </Modal.Header>
                <Modal.Body>{message}</Modal.Body>
                <Modal.Footer>
                    <Button variant="primary" onClick={handleClose}>
                        Ok
                    </Button>
                </Modal.Footer>
            </Modal>
        </>
    );
}
  

Комментарии:

1. Для чего это dummy ? Вы хотите сказать, что вы хотели установить props.message в качестве значения message из вашего useState? Кроме того, проверьте значение props.message перед использованием State

2. Я использую dummy , чтобы проиллюстрировать, что props.message на самом деле имеет значение и что message не устанавливается на это значение.

3. useState(value) устанавливает состояние только один раз при первом рендеринге. Вы могли бы, например console.log(props.message) . Я предполагаю, что это будет зарегистрировано более одного раза, и в первый раз это пустая строка.