react (context)

by Yury

HTML

<div id="app"></div>

CSS

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

div {
  user-select: none;
}

button {
  color: #eee;
  background: #20262E;
  padding: 10px 16px;
  border: none;
  border-radius: 3px;
  cursor: pointer;
}
button.delay {
  background: #20767E;
}
div > button + button {
  margin-left: 24px;
}

React

const {useEffect, useState} = React;

/* const NumberContext = React.createContext(); */
const NumberContext = React.createContext({num: 0, setNum: () => {}});

function App() {
	const [num, setNum] = useState(45);
  
  const reset = () => setNum(0);
  
  return (
    <NumberContext.Provider value={{num, setNum, reset}}>
      <div>
        <Display />
      </div>
    </NumberContext.Provider>
  );
}
function Display() {
  return (
    <NumberContext.Consumer>
      {value => <React.Fragment>
        <div onClick = {() => { value.setNum(value.num + 1)}} >
          The answer to the question is {value.num}.        
        </div>
        <br/>
        <button onClick = { () => {value.reset()} }>reset</button>
      </React.Fragment>}
    </NumberContext.Consumer>
  );
}

/* ReactDOM.render(<App />, document.querySelector("#app")) */
const root = ReactDOM.createRoot(document.getElementById("app"));
root.render(<App />);