Можно ли ссылаться на состояние изнутри состояния для создания идентификатора. например, id = this.state.name + this.state.desc
Что-то вроде этого?
this.state = {name:'', desc:'', id:`${this.state.name}-${this.state.desc}`}
Зависит от того, где вы это делаете. Если в теле класса, вы получите сообщение об ошибке.
Я думаю, что вы не можете, поскольку состояние еще не инициализировано. Но вы будете знать, где взять эти значения, поэтому вы можете просто установить id при обновлении вашего состояния.
Я думаю, что это возможно, если вы пишете несколько назначений в конструкторе, но я бы не стал этого делать. это похоже на антипаттерн, но не зная всего контекста, я не знаю, что здесь предложить. (это также больше похоже на вопрос проверки кода, чем на SE)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Помните, что вам нужно установить состояние с помощью 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 - но если OP пытается использовать this.state = {....} и ссылаться на this.state внутри него, то они, очевидно, не делают этого в конструкторе, поскольку состояние было определено ранее.
Думаю, в том-то и дело. Он пытается сделать это в конструкторе.
у вас может быть несколько строк this.state = ... , и тогда, я думаю, вы могли бы технически делать то, что они просят. это было бы не очень идиоматично.
Нет, это не сработает. this.state инициализируется перед конструктором, но ему не понравится, что вы ссылаетесь на неопределенную часть объекта. Вам нужно будет установить его после инициализации. Я предполагаю, что вы будете использовать this.state = {blah} из своего конструктора. В противном случае следует использовать this.setState().
Однако это также плохая практика, потому что каждый раз, когда вы обновляете свое имя или описание, оно снова обновляет состояние с вашим новым значением идентификатора. Я не знаю полного объема вашего кода, но вы, вероятно, можете просто сохранить идентификатор в функции, которая дает вам строку.
Что произойдет, если вы попробуете?