46
loading...
This website collects cookies to deliver better user experience
import React, {useState, createContext} from 'react'
//note that we don't use export default here
//create context here, use context in others
//this DataContext will be shared by all the components
export const DataContext= createContext([]);
//this is our provider
export const DataProvider=(props)=>{
const [data, setData]= useState([])
return(
<div>
<DataContext.Provider value={[data,setData]}>
{props.children}
</DataContext.Provider >
</div>
)
}
<DataContext.Provider value={[data,setData]}>
<Display.js/>
<DataOne.js/>
<DataTwo.js>
</DataContext.Provider >
<DataContext.Provider value="Hello, world!">
all the components I specify would share this single string. In my case, I want the data to be dynamic, so I use a useState hook.import React from "react"
import Display from "./Display"
import DataOne from "./DataOne"
import DataTwo from "./DataTwo"
import {DataProvider} from "./DataProvider"
function App() {
return (
<div>
<DataProvider>
<DataOne />
<DataTwo />
<Display />
</DataProvider>
</div>
);
}
export default App;
import React, {useState, useContext} from 'react'
import { DataContext } from './DataProvider'
// using curly brackets bcs we have more than one export
export default function DataOne() {
const [state,setState]= useState("Data coming from DataOne.js")
const [data,setData]= useContext(DataContext)
const addDataOne = () =>{
setData([...data, state])
}
return (
<div>
<button onClick={addDataOne}>Click to add data from DataOne</button>
</div>
)
}
export const DataContext= createContext([]);
import React, {useState, useContext} from 'react'
import { DataContext } from './DataProvider'
// using curly brackets bcs we have more than one export
export default function DataTwo() {
const [state,setState]= useState("Data coming from DataTwo.js")
const [data,setData]= useContext(DataContext)
const addDataTwo = () =>{
setData([...data, state])
}
return (
<div>
<button onClick={addDataTwo}>Click to add data from DataTwo</button>
</div>
)
}
import React, {useState, useContext} from 'react'
import { DataContext } from './DataProvider'
export default function Display() {
const [data,setData] = useContext(DataContext)
//here map is using regular brackets (), not curly brackets.
const mappedData= data.map((item=>(
<li>{item}</li>
)))
console.log(mappedData)
return (
<div>
<ul>
{mappedData}
</ul>
</div>
)
}