Вы можете использовать троичное выражение ? :
. Вот так
this.state.topics[this.state.topicSelected] ? this.state.topics[this.state.topicSelected].name : 'Topics'
Поскольку undefined
является ложным значением, оно вернет «Темы», когда this.state.topics[this.state.topicSelected]
не определено.
<select
value={this.state.topicSelected}
onChange={this.onTopicClick}
className="sort"
data-element>
<option key={this.state.topicSelected}
value={this.state.topicSelected}>
{this.state.topics[this.state.topicSelected] ?
this.state.topics[this.state.topicSelected].name : 'Topics'}
</option>
{this.state.topics.map(function (topic) {
return (<option key={topic.id} value={topic.id}>{topic.name}</option>);
})}
</select>
С тем, как вы делаете вещи, есть и другие проблемы, но я не считаю их относящимися к вашему вопросу. Во-первых, вы изменяете первый параметр списка, чтобы он был выбранным вами значением. Вместо этого вы должны установить значение выбора, который автоматически выбирает правильный вариант из списка. Вот как бы я написал это:
render() {
<select
value={this.state.topicSelected}
onChange={this.onTopicClick}
className="sort"
data-element>
<option value={0}>Topics</option>
{this.state.topics.map(topic =>
<option key={topic.id} value={topic.id}>{topic.name}</option>))}
</select>
}