ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • custom hook
    React 2022. 5. 21. 12:27
    <!DOCTYPE html>
    <html lang="en">
      <body>
        <div id="root"></div>
        <script src="https://unpkg.com/react@17/umd/react.development.js"></script>
        <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
        <script src="https://unpkg.com/@babel/standalone@7.16.4/babel.min.js"></script>
        <div id="root"></div>
        <script type="text/babel">
          const rootElement = document.getElementById("root");
    
          function useLocalStorage(itemName, value = "") {
            // state는 동적인 값이다.
            const [state, setState] = React.useState(() => {
              return window.localStorage.getItem(itemName) || value;
            });
    
            console.log("useEffect execute before :" + [state, setState]);
    
            // state값이 변결 할 때마다 실행
            React.useEffect(() => {
              console.log("useEffect execute");
              console.log(state);
              window.localStorage.setItem(itemName, state);
            }, [state]);
    
            return [state, setState];
          }
          // App component
          const App = () => {
            //setXXX는 useLocalStorage와 싱크되어있다.
            const [keyword, setKeyword] = useLocalStorage("keyword");
            const [result, setResult] = useLocalStorage("result");
            const [typing, setTyping] = useLocalStorage("typing", false);
    
            function handleChange(event) {
              setKeyword(event.target.value); //keyword값이 갱신
              setTyping(true); //typing값이 갱신
            }
    
            function handleClick(event) {
              setTyping(false);
              setResult(`We find results of ${keyword}`);
            }
    
            return (
              <>
                <input onChange={handleChange} value={keyword} />
                <button onClick={handleClick}>search</button>
                <p>{typing ? `Looking for ${keyword}` : result}</p>
              </>
            );
          };
    
          ReactDOM.render(<App />, rootElement);
        </script>
      </body>
    </html>

    'React' 카테고리의 다른 글

    hook - flow  (0) 2022.09.18
    useState lazy initialization  (0) 2022.08.20
    useEffectとは  (0) 2022.05.07
    HOOK- useState  (0) 2022.05.04
    Event-Handler②  (0) 2022.05.03

    댓글

Designed by Tistory.