복붙노트

[REACTJS] useEffect 내부 상태는 후크 반응 항상 초기 상태를 말한다

REACTJS

useEffect 내부 상태는 후크 반응 항상 초기 상태를 말한다

해결법


  1. 1.당신이 구성 요소의 마운트 초기에 실행하여 useEffect를 작성했습니다 때문에, 어느 참조 초기 메시지의 값과 폐쇄를 생성하는 메시지 업데이트, 아직 후속 호출에 같은 값을 참조 할 경우에도

    당신이 구성 요소의 마운트 초기에 실행하여 useEffect를 작성했습니다 때문에, 어느 참조 초기 메시지의 값과 폐쇄를 생성하는 메시지 업데이트, 아직 후속 호출에 같은 값을 참조 할 경우에도

    대신 마운트 메시지 변경 초기에 실행하는 useEffect를 구성해야

    export function useChat() {
      const [messages, setMessages] = useState([]);
    
      useEffect(() => {
        const socket = openSocket("http://localhost:3003");
        socket.on("chat message", msg => {
          const newState = update(messages, { $push: [msg] });
          setMessages(newState);
        });
      }, [messages]);
    
      return { messages };
    } 
    

    그렇지 않으면 당신은 업데이트 상태로 콜백 패턴을 사용할 수 있습니다

    export function useChat() {
      const [messages, setMessages] = useState([]);
    
      useEffect(() => {
        const socket = openSocket("http://localhost:3003");
        socket.on("chat message", msg => {
          setMessages(prevMessages => update(prevMessages, { $push: [msg] }););
        });
      }, []);
    
      return { messages };
    }
    
  2. from https://stackoverflow.com/questions/54675523/state-inside-useeffect-refers-the-initial-state-always-with-react-hooks by cc-by-sa and MIT license