chore: migrate to reducer pattern instead of useState
This commit is contained in:
parent
18dd8b83f0
commit
7150ca87c3
7 changed files with 85 additions and 29 deletions
|
|
@ -1,20 +1,26 @@
|
|||
import React from "react";
|
||||
import React, { useReducer } from "react";
|
||||
import { ChatMessage, User } from "../../../shared";
|
||||
import { ChatContext } from "../contexts/ChatContext";
|
||||
import { chatReducer } from "../reducers/chatReducers";
|
||||
|
||||
export function ChatProvider({ children }: { children: React.ReactNode }) {
|
||||
const [messages, setMessages] = React.useState<ChatMessage[]>([]);
|
||||
const [currentUser, setCurrentUser] = React.useState<User | null>(null);
|
||||
const [state, dispatch] = useReducer(chatReducer, {
|
||||
messages: [],
|
||||
currentUser: null,
|
||||
isConnected: false,
|
||||
});
|
||||
|
||||
const addMessage = (message: ChatMessage) => {
|
||||
setMessages((prev) => [...prev, message]);
|
||||
const value = {
|
||||
state,
|
||||
dispatch,
|
||||
actions: {
|
||||
addMessage: (message: ChatMessage) =>
|
||||
dispatch({ type: "ADD_MESSAGE", payload: message }),
|
||||
setUser: (user: User) => dispatch({ type: "SET_USER", payload: user }),
|
||||
setConnected: (isConnected: boolean) =>
|
||||
dispatch({ type: "SET_CONNECTED", payload: isConnected }),
|
||||
},
|
||||
};
|
||||
|
||||
return (
|
||||
<ChatContext.Provider
|
||||
value={{ messages, currentUser, addMessage, setCurrentUser }}
|
||||
>
|
||||
{children}
|
||||
</ChatContext.Provider>
|
||||
);
|
||||
return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue