import React, { useState } from 'react'
import {Picker} from "emoji-mart"
function Emoji() {
const [input, setInput] = useState('');
const text = '';
const addEmoji = (e) => {
let emoji = e.native;
setInput({
key: 'text',
text: input.text + emoji});
console.log("typed", input )
}
const sendMessage = (e) => {
e.preventDefault();
console.log("final",input)
setInput('')
}
return (
<div>
<form>
<input type='text' value={input} onChange={(e) => setInput(e.target.value)}/>
<button onClick={sendMessage} type="submit">send</button>
</form>
<span><Picker set='apple' value={input} onSelect={addEmoji}/></span>
</div>
)
}
export default Emoji
您以两种不同的方式设置输入字段,<input />'s onChange
设置文本,而在addEmoji
中设置对象,您应该为每个回调保持不同的状态,或者让对象进行输入并适当设置值。
const addEmoji = (e) => {
let emoji = e.native;
setInput({
key: 'text',
text: input.text + emoji
});
}
我不确定input.text
是从哪里来的,尽管它不是在useState()
中设置的。
目前,您正在将一个空字符串作为初始值传递给输入状态,它应该是一个对象
[input, setInput] = useState({})
<input onChange={e => {
setInput(prevState => {...prevState, {key: 'text', text: e.target.value}})
}
/>
一旦对象设置正确,您就可以在调用addEmoji时读取文本属性,并且在addEmoj中,您需要更新代码以设置正确的键,就像我在onChange
回调中所显示的那样。
const addEmoji = (e) => {
const emoji = e.native;
setInput(prevState => {...prevState, {
text: input.text + emoji
});
}