Ссылка на состояние изнутри состояния - React js

Можно ли ссылаться на состояние изнутри состояния для создания идентификатора. например, id = this.state.name + this.state.desc

Что-то вроде этого?

this.state = {name:'', desc:'', id:`${this.state.name}-${this.state.desc}`}

Что произойдет, если вы попробуете?

Herohtar 28.11.2018 23:52

Зависит от того, где вы это делаете. Если в теле класса, вы получите сообщение об ошибке.

kind user 28.11.2018 23:53

Я думаю, что вы не можете, поскольку состояние еще не инициализировано. Но вы будете знать, где взять эти значения, поэтому вы можете просто установить id при обновлении вашего состояния.

soulpaul 28.11.2018 23:54

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

worc 29.11.2018 00:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
2 133
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Помните, что вам нужно установить состояние с помощью setState

Так

this.setState({ id:`${this.state.name}-${this.state.desc}` })

Это также предполагает, что вы уже установили состояние в конструкторе (или где-то еще в приложении).

Если вы находитесь в конструкторе, то все должно работать нормально ...

this.state = { name: 'Toli', desc: 'A programmer' };
this.state = {...this.state, id:`${this.state.name}-${this.state.desc}`}

Я предполагаю, что вы хотите сохранить name и desc в состоянии, поэтому я копирую их с помощью операции распространения (...this.state)

вы можете и должны установить состояние без setState в конструкторе

worc 28.11.2018 23:58

@worc - но если OP пытается использовать this.state = {....} и ссылаться на this.state внутри него, то они, очевидно, не делают этого в конструкторе, поскольку состояние было определено ранее.

Adam 29.11.2018 00:00

Думаю, в том-то и дело. Он пытается сделать это в конструкторе.

soulpaul 29.11.2018 00:03

у вас может быть несколько строк this.state = ... , и тогда, я думаю, вы могли бы технически делать то, что они просят. это было бы не очень идиоматично.

worc 29.11.2018 00:03

Нет, это не сработает. this.state инициализируется перед конструктором, но ему не понравится, что вы ссылаетесь на неопределенную часть объекта. Вам нужно будет установить его после инициализации. Я предполагаю, что вы будете использовать this.state = {blah} из своего конструктора. В противном случае следует использовать this.setState().

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

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