React Context API examples
*context api example for me, myself, and i
2 ways to use context api with inital value
hoge.contex.jsx import { createContext } from ‘react’ import HOGE_DATA from ‘./hoge.data.js’ // some data with values const HogeContext = createContext(HOGE_DATA) export default HogeContext
1 using Context.Consumer
foo.jsx import HogeContext from ‘hoge.context.jsx’ <HogeContext.Consumer> { data => { const hogeData = data[hoge] const { foo, blah } = hoge return ( use the destructure data as arguments ) } } </HogeContext.Consumer>
2 useContext
foo.jsx import { useContedt } from ‘react’ const data = useContext(HogeContext) const hogeData = data[hoge] const { foo, blah } = hogeData return ( <div className=‘foo’>{foo}/> <div className=‘blah’>{blah}/> )
To dynamically set values to context
hoge.context.jsx import { createContext } const HogeContext = createContext(undefined) export default HogeContext
foo.jsx import { useContext } from ‘react’ import { HogeContext } from ‘hoge.context’ const foo = { bool: true, method : () => concsole.log(“blah”); } <HogeContext.Provide value={foo}r> <Component /> <HogeContext.Provider>
component.jsx import { useContext } from ‘react’ import HogeContext from ‘hoge.context’ const { bool, method } = useContext(HogeContext)
but this is bad practice so....
make context with initial values and pass local values
hoge.context.jsx import { createContext } const HogeContext = createContext({ bool: true, method: () => {} }) export default HogeContext
foo.jsx import { useState, useContext } from ‘react’ import { HogeContext } from ‘hoge.context’ const [bool, setBool] = useState(true) const method = () => setBool(!bool) <HogeContext.Provide value={{ bool, method, }}r> <Component /> <HogeContext.Provider>
component.jsx import { useContext } from ‘react’ import HogeContext from ‘hoge.context’ const { bool, method } = useContext(HogeContext)
or create a provider
hoge.provider.jsx import React, { createContext, useState, useEffect } from 'react'; import { addItemToHoge, removeItemFromHoge, HogeItem, totalHogeItem, totalHogePrice, } from ‘./hoge.utils.js'; export const HogeContext = createContext({ hidden: true, toggleHidden: () => {}, hogeItems: [], addItem: () => {}, removeItem: () => {}, clearItemFromHoge: () => {}, hogeItemsCount: 0, totalPrice: 0, }); const HogeProvider = ({ children }) => { const [hidden, setHidden] = useState(true); const [hogeItems, setHogeItems] = useState([]); const [hogeItemsCount, setHogeItemsCount] = useState(0); const [totalPrice, setTotalPrice] = useState(0); const addItem = (item) => setHogeItems(addItemToHoget(hogeItems, item)); const removeItem = (item) => setHogeItems(removeItemFromHoge(hogeItems, item)); const clearItemFromHoge = (item) => setHogeItems(clearItem(hogeItems, item)); const toggleHidden = () => setHidden(!hidden); useEffect(() => { setHogeItemsCount(totalHogeItem(hogeItems)); setTotalPrice(totalHogePrice(hogeItems)); }, [hogeItems]); return ( <HogeContext.Provider value={{ hidden, addItem, toggleHidden, hogeItems, removeItem, clearItemFromHoge, hogeItemsCount, totalPrice, }} > {children} </HogeContext.Provider> ); }; export default HogeProvider
index.js import HogePorvider from ‘’hoge.provider’ <HogeProvider> <App/> <HogeProvider>