Как мы можем инициализировать состояние в машинописном тексте реакции в методе конструктора, если оно имеет определенный тип интерфейса

У меня есть приведенный ниже код: Где у меня есть тип интерфейса для состояния. Как мне инициализировать его в методе конструктора. Поскольку это не позволяет мне инициализировать строку/ноль/число

interface IState { selectedUser?: IUserMenu}

class AssignUser extends React.Component<IProps, IState>{ constructor(props: IProps) { super(props); this.state = { selectedUser: ' what i have to put here' }}}

Кроме того, что это означает this.state = {} в конструкторе функция означает ?

IUserMenu - это интерфейс, поэтому я не могу инициализировать число, '', null,

Единственное, что я могу использовать, это undefined

Вызов this.state = {} в конструкторе устанавливает начальное состояние компонента. Возможно, просто передайте this.state = {}, если у вас нет начального значения для state.selectedUser — ваш интерфейс указывает, что это необязательно.

Jay 30.05.2019 14:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
220
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш интерфейс IState указывает, что у него есть одно свойство, называемое selectedUser, которое является необязательным (поскольку после него стоит знак ?).

Если вы делать предоставляете selectedUser, он должен быть типа IUserMenu. Итак, ваш what i have to put here — это объект, соответствующий интерфейсу IUserMenu.

this.state = {} означает инициализацию состояния с помощью объекта, определенного в фигурных скобках. В вашем случае объект, определенный в фигурных скобках, должен соответствовать вашему интерфейсу IState (поэтому содержит одно свойство с именем selectedUser, которое является undefined типа IUserMenu)

Я использую состояние selectedUser в реквизитах Picker selectedUser Но мне нужно инициализировать это состояние в конструкторе. Но мое значение <item> является объектом. В этом случае, что я должен был инициализировать?

Ankit Jayaprakash 30.05.2019 14:27

Как выглядит интерфейс IUserMenu? И передается ли один из этих типов в качестве реквизита?

Will Jenkins 30.05.2019 14:31
interface IUserMenu { name: string; surname: string; }
Ankit Jayaprakash 30.05.2019 14:35

Хорошо, мне кажется, нет смысла инициализировать его чем-либо... вы могли бы просто сделать: this.state = { selectedUser: undefined } или вообще не заморачиваться установкой состояния в конструкторе

Will Jenkins 30.05.2019 14:39

Или вы можете даже инициализировать его так: this.state = {selectedUser: { name: "", surname: "" }}

Will Jenkins 30.05.2019 14:43
Ответ принят как подходящий

Привет @ankitjayaprakash,

У меня есть пример с вашим случаем, когда я инициализирую объект, который вы хотите передать, описанный в интерфейсе (но не являющийся необязательным)

Вы можете это увидеть здесь

То, что "this.state = {}" служит в конструкторе, предназначено только для инициализации состояния этого компонента, даже если оно может быть отключено без какой-либо функции компоновщика.

Тип «null» не может быть назначен типу «IUserMenu | неопределенный'. Я получаю эту ошибку

Ankit Jayaprakash 30.05.2019 14:30

У меня это работает без каких-либо ошибок со стороны Typescript, но если вы хотите лучше, откройте CodeSandbox или StackBlitz и скопируйте весь код. Таким образом, мы можем помочь вам лучше.

frangaliana 30.05.2019 14:40

Спасибо @ fg93 за ваши усилия, я работаю, но получаю предложение TSLint. Хорошо. Спасибо

Ankit Jayaprakash 30.05.2019 14:48

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