У меня есть приложение реагирования, которое использует модуль узла emoji-mar.И я пытаюсь сделать так, чтобы пользователь мог добавлять Emojis в комментарии пользователей.
ТАК У меня есть компонент для комментариев, основанный на классе, и я заставил его работать только с одним эмодзи.
Я прокомментировал мое решение для решения на основе массива в коде:
constructor(props){
super(props)
this.state ={
loading: false,
showModal: false,
showEmoji: false,
//emoji: []
emoji: {
id: '',
count: 1
}
}
//executed, when a user picks an emoji, the emoji object is sent in as parameter
addEmoji = (emoji) =>{
console.log(emoji.id)
console.log(this.state.emoji.id)
if(emoji.id === this.state.emoji.id){
this.increment(emoji)
}else{
let selectedEmoji = {
id: emoji.id,
count: 1
}
this.setState({
emoji: selectedEmoji,
showEmoji: true
})
console.log(this.state.emoji)
}
}
У меня также есть метод увеличения, свойство count дляобъект эмодзи, поэтому, если эмодзи выбирается более одного раза, он будет увеличивать
increment = (emoji) =>{
console.log(emoji.id)
console.log(this.state.emoji.id)
console.log(this.state.emoji.count)
let newEmoji = {...this.state.emoji}
newEmoji.count = this.state.emoji.count+1
console.log(newEmoji.count)
this.setState(
{emoji: newEmoji}
)
console.log(this.state.emoji.count)
}
и мой условный рендер, где я отображаю свои эмодзи
{this.state.showEmoji && this.state.emoji != null &&
<div className="emoji">
{/*{emojis}*/}
{
<Emoji onClick={this.increment} tooltip={true}
emoji={{id: this.state.emoji.id, skin: 1}} size={25} />}
<p>{this.state.emoji.count}</p>
</div>
}
Я пытался использовать функцию картыотобразить эмодзи в переменную, но она выдала ошибку
this.state.emoji.map is not a function
let emojis = this.state.emoji.map( (emoji, index) =>{
return <Emoji onClick={this.increment} tooltip={true}
emoji={{id: emoji.id, skin: 1}} size={25} />
})
, хотя я объявил ее массивом.Я подозреваю, что, поскольку массив изначально пуст, у него нет объекта для работы в функции addEmoji?