React週末終了!7


#7ベッドを離れる


userefを使用して構成部品に変数を作成するには


素子から特定のDOMを選択するにはrefを用いなければならないことを学んだ.
この場合、Hookの一種のuserefで設定できます.
userefはDOMを選択する以外にも他の用途があります.
すなわち、コンポーネントでクエリーおよび変更できる変数を管理します.
useref管理変数を使用して、次の値を管理します.
  • settimeout、setIntervalによって作成されたid
  • 外部ライブラリを使用して作成するインスタンス
  • 転動位置
  • Appコンポーネントでuserefを使用して変数を管理します.
    用途は、配列に新しいプロジェクトを追加し、新しいプロジェクトで使用される一意のidを管理することです.
    UserListコンポーネントに直接配列を宣言し、今回はAppに配列を宣言し、propsとしてUserListに渡します.

    App.js

    import React from 'react';
    
    import UserList from './UserList';
    
    function App() {
      const users = [
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ];
      return <UserList users={users} />;
    }
    
    export default App;

    UserList.js

    import React from 'react';
    
    function User({ user }) {
      return (
        <div>
          <b>{user.username}</b> <span>({user.email})</span>
        </div>
      );
    }
    
    function UserList({ users }) {
      return (
        <div>
          {users.map(user => (
            <User user={user} key={user.id} />
          ))}
        </div>
      );
    }
    
    export default UserList;
    Appでuseref()を使用してnextIdという変数を作成します.

    App.js

    import React, { useRef } from 'react';
    import UserList from './UserList';
    
    function App() {
      const users = [
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ];
    
      const nextId = useRef(4);
      const onCreate = () => {
        // 나중에 구현 할 배열에 항목 추가하는 로직
        // ...
    
        nextId.current += 1;
      };
      return <UserList users={users} />;
    }
    
    export default App;
    useref()からパラメータとして値を使用する場合、この値はです.現在の既定値に設定します.
    そしてこの値を修正するとき.現在の値を変更すると、クエリー時に変更できます.現在のクエリを実行します.

    配列へのアイテムの追加


    今回は、配列に新しいアイテムを追加する方法について説明します.
    2つのinputと1つのbuttonからなるCreateUserコンポーネントをsrcに作成します.

    CreateUser.js

    import React from 'react';
    
    function CreateUser({ username, email, onChange, onCreate }) {
      return (
        <div>
          <input
            name="username"
            placeholder="계정명"
            onChange={onChange}
            value={username}
          />
          <input
            name="email"
            placeholder="이메일"
            onChange={onChange}
            value={email}
          />
          <button onClick={onCreate}>등록</button>
        </div>
      );
    }
    
    export default CreateUser;
    このコンポーネントのステータスを管理するのではなく、appファイルに格納し、inputの値とイベントとして登録する関数をpropsに渡して使用します.
    次のようにAppファイルを変更します.

    App.js

    import React, { useRef } from 'react';
    import UserList from './UserList';
    import CreateUser from './CreateUser';
    
    function App() {
      const users = [
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ];
    
      const nextId = useRef(4);
      const onCreate = () => {
        // 나중에 구현 할 배열에 항목 추가하는 로직
        // ...
    
        nextId.current += 1;
      };
      return (
        <>
          <CreateUser />
          <UserList users={users} />
        </>
      );
    }
    
    export default App;
    スクリーン実装...

    アプリケーションはCreateUserコンポーネントを必要とするpropsを提供します.

    App.js

    import React, { useRef, useState } from 'react';
    import UserList from './UserList';
    import CreateUser from './CreateUser';
    
    function App() {
      const [inputs, setInputs] = useState({
        username: '',
        email: ''
      });
      const { username, email } = inputs;
      const onChange = e => {
        const { name, value } = e.target;
        setInputs({
          ...inputs,
          [name]: value
        });
      };
      const users = [
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ];
    
      const nextId = useRef(4);
      const onCreate = () => {
        // 나중에 구현 할 배열에 항목 추가하는 로직
        // ...
    
        setInputs({
          username: '',
          email: ''
        });
        nextId.current += 1;
      };
      return (
        <>
          <CreateUser
            username={username}
            email={email}
            onChange={onChange}
            onCreate={onCreate}
          />
          <UserList users={users} />
        </>
      );
    }
    
    export default App;
    inputに値を入力して登録ボタンを押すとinput値が初期化されます.

    ボタンをクリック...

    出力をうまく初期化しました.
    usersのuserStateを使用して構成部品を管理しましょう.

    App.js

    import React, { useRef, useState } from 'react';
    import UserList from './UserList';
    import CreateUser from './CreateUser';
    
    function App() {
      const [inputs, setInputs] = useState({
        username: '',
        email: ''
      });
      const { username, email } = inputs;
      const onChange = e => {
        const { name, value } = e.target;
        setInputs({
          ...inputs,
          [name]: value
        });
      };
      const [users, setUsers] = useState([
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ]);
    
      const nextId = useRef(4);
      const onCreate = () => {
        // 나중에 구현 할 배열에 항목 추가하는 로직
        // ...
    
        setInputs({
          username: '',
          email: ''
        });
        nextId.current += 1;
      };
      return (
        <>
          <CreateUser
            username={username}
            email={email}
            onChange={onChange}
            onCreate={onCreate}
          />
          <UserList users={users} />
        </>
      );
    }
    
    export default App;
    配列に新しい項目を追加する時間です.
    配列はpush関数を使用できません.使用する場合は、既存の配列を一度コピーしてから使用する必要があります.
    拡散演算子を使用して配列に新しいアイテムを最初に追加します.

    App.js

    import React, { useRef, useState } from 'react';
    import UserList from './UserList';
    import CreateUser from './CreateUser';
    
    function App() {
      const [inputs, setInputs] = useState({
        username: '',
        email: ''
      });
      const { username, email } = inputs;
      const onChange = e => {
        const { name, value } = e.target;
        setInputs({
          ...inputs,
          [name]: value
        });
      };
      const [users, setUsers] = useState([
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ]);
    
      const nextId = useRef(4);
      const onCreate = () => {
        const user = {
          id: nextId.current,
          username,
          email
        };
        setUsers([...users, user]);
    
        setInputs({
          username: '',
          email: ''
        });
        nextId.current += 1;
      };
      return (
        <>
          <CreateUser
            username={username}
            email={email}
            onChange={onChange}
            onCreate={onCreate}
          />
          <UserList users={users} />
        </>
      );
    }
    
    export default App;
    結果は...


    追加した「apple」と「happle」の電子メールの出力は良好です.
    2つ目の方法はconcat関数を使用し、concat関数は既存の配列を変更するのではなく、新しい要素を追加する新しい配列を作成することです.

    App.js

    import React, { useRef, useState } from 'react';
    import UserList from './UserList';
    import CreateUser from './CreateUser';
    
    function App() {
      const [inputs, setInputs] = useState({
        username: '',
        email: ''
      });
      const { username, email } = inputs;
      const onChange = e => {
        const { name, value } = e.target;
        setInputs({
          ...inputs,
          [name]: value
        });
      };
      const [users, setUsers] = useState([
        {
          id: 1,
          username: 'velopert',
          email: '[email protected]'
        },
        {
          id: 2,
          username: 'tester',
          email: '[email protected]'
        },
        {
          id: 3,
          username: 'liz',
          email: '[email protected]'
        }
      ]);
    
      const nextId = useRef(4);
      const onCreate = () => {
        const user = {
          id: nextId.current,
          username,
          email
        };
        setUsers(users.concat(user));
    
        setInputs({
          username: '',
          email: ''
        });
        nextId.current += 1;
      };
      return (
        <>
          <CreateUser
            username={username}
            email={email}
            onChange={onChange}
            onCreate={onCreate}
          />
          <UserList users={users} />
        </>
      );
    }
    
    export default App;
    したがって、配列に新しいアイテムを追加する場合は、この展開演算子を使用するか、concat関数を使用することができます.
    注:ベロフォードとのモダン反応
    感じ:
  • では、userefを使用して変数を作成し、配列に新しいアイテムを追加する方法について説明します.
  • を学ぶのが難しいほど、完全に理解するには、自分でコードを作る方法しかありません.