孤独プログラマー譚

孤独死が近い。

React hooks useContext 切り出し

切り出されたコンテキスト。

import React, { useState, createContext } from 'react';

export const QuxContext = createContext()

export function QuxContextProvider(props) {
  const [value, setValue] = useState(0)

  return (
    <QuxContext.Provider value={[value, setValue]}>
      {props.children}
    </QuxContext.Provider>
  )
}


親、子、孫コンポーネント

import React from 'react';
import BarComponent from '../BarComponent/BarComponent';
import { QuxContextProvider } from '../../QuxContext';

const FooComponent = () => {
  return (
    <div className="App">
      FooComponent
      <QuxContextProvider>
        <BarComponent/>
      </QuxContextProvider>
    </div>
  )
};

export default FooComponent;
import React, { useContext, useState } from 'react';
import BazComponent from '../BazComponent/BazComponent';
import { QuxContext } from '../../QuxContext';

const BarComponent = () => {
  const [value, setValue] = useContext(QuxContext)

  return (
    <div className="App">
      BarComponent
      <div><button onClick={() => setValue(value + 1)}>increment</button></div>
      <div>{value}</div>
      <BazComponent />
    </div>
  )
};

export default BarComponent;
import React, { useContext, useState } from 'react';
import { QuxContext } from '../../QuxContext';

const BazComponent = () => {
  const [value, setValue] = useContext(QuxContext)

  return (
    <div className="App">
      BazComponent<br/>
      <div><button onClick={() => setValue(value + 1)}>increment</button></div>
      <div>{value}</div>
    </div>
  )
};

export default BazComponent;