javascript 如何将reactjs中的常量和useEffect从函数更改为呈现组件

jgzswidk  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(136)

我在一个函数中有这个代码

function Lobby () {

但我想将它传递给class Lobby extends Component {,以获得

render () {
    return (

但是把这些const和useEffect等..给了我一个错误,有没有办法把它“翻译”成一个组件?
我感谢那些能帮助我的人
原始代码:

function Lobby () {
    const [message, updateMessage] = useState('')
    const [messages, updateMessages] = useState([])

   

 useEffect(() => {
        const handleNewMessage = newMessage =>
            updateMessages([...messages, newMessage])
        socket.on('chat.message', handleNewMessage)
        return () => socket.off('chat.message', handleNewMessage)
    }, [messages])

   

 const handleFormSubmit = event => {
        event.preventDefault()
        if (message.trim()) {
            socket.emit('chat.message', {
                userid: myId,
                lobby,
                username: username,
                message
            })
            updateMessage('') 
            
const recibesound = document.getElementsByClassName("audio-element")[0]
        recibesound.play()
        
   

 }

}

const handleInputChange = event =>
updateMessage(event.target.value)

////teste
const handleTesteChange = event =>
updateMessage(event.target.value)

const handleTesteSubmit = event => {
    event.preventDefault()
    if (message.trim()) {
        socket.emit('chat.message', {
            userid: myId,
            message
            
   

 })
    updateMessage('') 
   
}

}
///teste


  

  return(  <div>
     //html
    </div>
)}
    
 

   export default Lobby;

目标:

class Lobby extends Component {

// same code

 render() {
   return(

<div>
 //html
</div>

 );
  }
}
jdzmm42g

jdzmm42g1#

据我所知,您正在尝试将hooks函数组件转换为类组件。您不能在类组件中使用任何hooks函数。您必须使用this.setState()而不是useState hook来重写类组件(代替updateMessage,而updateMessages)和this.state.message代替'消息',并且使用componentDidUpdate方法而不是useEffect挂钩。对于函数(handleInputChange),可以将它们定义为类的方法。对于常量(recibesound),可以在类之外定义它。
简而言之,你必须重写你的组件。我建议你查看一个关于类组件的React教程。

相关问题