원클릭으로
frontend-provider-context
Use when creating or modifying Provider Context components for local state management
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when creating or modifying Provider Context components for local state management
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when deploying Cloudflare Workers, managing R2 storage, or working with Cloudflare infrastructure
Use when working with ANTD components, theme tokens, icons, forms, or feedback components (message/notification/modal)
Use when adding, referencing, or serving static assets (images, fonts, videos, 3D models) through the R2 CDN pipeline with type-safe imports
Use when writing or reviewing JavaScript/TypeScript code for style patterns like concise arrows, inline handlers, expression formatting, or when tempted to use eslint-disable
Use when working with environment variables in frontend code
Use when creating or modifying keyboard shortcuts/hotkeys in frontend code
| name | frontend-provider-context |
| description | Use when creating or modifying Provider Context components for local state management |
Standard pattern for React Context providers using class State + useReducer + setState(partial) for page/component-level state management.
import React, { createContext, useReducer } from "react";
class State {
key1: string = "";
key2: boolean = false;
key3: number = 0;
}
const ContextDefault: { state: State; setState: React.Dispatch<Partial<State>> } = {
state: new State(),
setState: () => {},
};
const Reducer = (state: State, partial: Partial<State>): State => ({ ...state, ...partial });
const Context = createContext(ContextDefault);
export const Provider_[Name] = ({ children }: { children: React.ReactNode }) => {
const [state, setState] = useReducer(Reducer, new State());
return <Context.Provider value={{ state, setState }}>{children}</Context.Provider>;
};
export const useProvider_[Name] = () => React.useContext(Context);
Partial<State> for setState, no-op prevents crashes outside provider({ ...state, ...partial })useReducer + new State() initializationuseContext(Context) for consuming| Type | Pattern | Example |
|---|---|---|
| Provider | Provider_[Name] | Provider_Page_Set, Provider_Spark_FileBrowserModal |
| Hook | useProvider_[Name] | useProvider_Page_Set |
| Variable | p[Name] (camelCase) | pPageSet, pModal |
// 1. Wrap component tree
<Provider_Page_Set>
<PageContent />
</Provider_Page_Set>
// 2. Use in child components
const pPageSet = useProvider_Page_Set();
pPageSet.setState({ selectedSceneFileId: "123" });
pPageSet.state.selectedSceneFileId;
// Multiple properties
pPageSet.setState({ selectedSceneFileId: "123", selectedSceneId: "456" });
// Toggle
pPageSet.setState({ isLoading: !pPageSet.state.isLoading });
For initializing from props (e.g., route params):
export const Provider_Page_Set = ({
children,
initialState,
}: {
children: React.ReactNode;
initialState?: Partial<State>;
}) => {
const [state, setState] = useReducer(
Reducer,
initialState ? { ...new State(), ...initialState } : new State()
);
return <Context.Provider value={{ state, setState }}>{children}</Context.Provider>;
};
// Usage
<Provider_Page_Set initialState={{ selectedSceneId: sceneId }}>
| Wrong | Correct |
|---|---|
| useState + individual setters | useReducer + setState(partial) |
| Deep nested state objects | Flat state: modalIsOpen, panelIsCollapsed |
| Default exports | Named exports only |
| Custom setter functions per key | Single setState({ key: value }) |
Why useReducer + partial is better:
// Place at page root
export const Page_Set = () => (
<Provider_Page_Set initialState={{ selectedSceneId }}>
<PageSetContent />
</Provider_Page_Set>
);
Use for: State shared across subcomponents, persists across sub-component mounts.
// Place at component root
export const PageSet_Canvas = () => (
<Provider_PageSet_Canvas>
<Canvas><CanvasContent /></Canvas>
</Provider_PageSet_Canvas>
);
Use for: State only needed in subtree, resets on unmount.
| Provider | Location | Purpose |
|---|---|---|
Provider_Page_Set | Page_Set/ | Selected scene/file IDs, placement mode |
Provider_Page_Scene | Page_Scene/ | Scene editor state |
Provider_Spark_FileBrowserModal | components/Spark_FileBrowserModal/ | Modal file selection |
State class with default valuesContextDefault with Partial<State> typeReducer spread mergeProvider_[Name], useProvider_[Name]initialState prop if neededp[Name]