UseMoom을 사용하여 탄성 어셈블리 생성하기
8468 단어 reactwebdevtutorialjavascript
그러나 간단한 구성 요소를 다시 사용할 때 이러한 가설은 도구를 공유하는 문제를 초래할 수 있다.오늘의 예시에서, 우리는 어떻게 탄력적인 폼 구성 요소를 만드는지 연구할 것이다.
Sometimes we assume a certain component is only ever displayed once. Such as a navigation bar. This might be true for some time. However, this assumption often causes design problems that only surface much later. - Dan Abramov
전체 후속 코드here와 실제 프레젠테이션here을 볼 수 있습니다.
설정
우리는 우선create react app를 사용하여 프로젝트를 안내하고react 안내와shortid 패키지를 설치할 것입니다.이 프레젠테이션에서 저는 shortid 패키지를 사용하여 무작위로 생성된 유일한 ID를 만들 것입니다. 그러나 어떤 방법으로든 무작위 ID 문자열을 만들 수 있습니다.
npx create-react-app usememo-resilient-components;
cd usememo-resilient-components;
npm i react-boostrap shortid;
npm start;
react 부트에 CDN 링크가 포함되지 않으므로 부트 css 파일에 CDN 링크를 추가하는 것을 잊지 마십시오.react 안내 문서 here 에 따라 조작할 수 있습니다.// index.html
...
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
...
양식 프로세서 만들기
우리 먼저 우리 프로그램에 들어갑시다.js, 템플릿 파일을 정리하고 폼 프로세서를 만듭니다.우리는useState 갈고리를 사용하여 빈 대상을 설정하여 파라미터를 저장할 것입니다.모듈화를 극대화하기 위해, 우리의 폼 처리 함수에서, 우리는 setParams에 리셋을 전달할 것입니다. 이 setParams들은 필요에 따라 가능한 한 많은 폼 요소의 이름과 값 속성을 목표로 합니다.
또한react 가이드 패키지에서 가이드 요소를 가져오고 용기와 열을 현재 표시로 설정합니다.너의 응용.js는 다음과 같습니다.
// App.js
import { useState } from "react";
import { Container, Col } from "react-bootstrap";
function App() {
const [params, setParams] = useState({});
const handleChange = (e) => {
const param = e.target.name;
const value = e.target.value;
setParams((prevParams) => {
return { ...prevParams, [param]: value };
});
};
return (
<Container>
<Col lg="5">
<h1>Generate Unique IDs Demo</h1>
</Col>
</Container>
);
}
export default App;
양식 작성 및 입력 표시
다음에 폼 구성 요소를 만들 것입니다.이 프레젠테이션에 대해react bootstrap에서 기본적인 두 요소 폼을 가져왔지만, 임의로 많은 폼 요소를 추가할 수 있습니다.우리의 구성 요소는 응용 프로그램의 도구로 처리 프로그램 함수에 전달될 것입니다.js에서 폼 onChange 속성을 처리합니다.
// InputForm.js
import { Form } from "react-bootstrap";
export default function InputForm({ handleChange }) {
return (
<Form className="mb-2">
<Form.Group>
<Form.Label>Email</Form.Label>
<Form.Control
type="email"
placeholder="Enter email"
name="email"
onChange={handleChange}
/>
</Form.Group>
<Form.Group>
<Form.Label>Name</Form.Label>
<Form.Control
type="text"
placeholder="Enter Name"
name="name
onChange={handleChange}
/>
</Form.Group>
</Form>
);
}
되돌아오는 파라미터가 어떤 상태에 있는지 보기 위해서, 우리는 그것들을 콘솔에 간단하게 기록할 수 있지만, 나는 이미 구성 요소를 만들어서, 이 프레젠테이션에 우리의 파라미터를 보여 준다.내 구성 요소는 프로그램에서 폼 프로세서가 전달하는 모든 파라미터를 비추는 것입니다.js가 Jumbotron 요소에 표시됩니다.// DisplayInput.js
...
import React from "react";
import { Jumbotron } from "react-bootstrap";
export default function DisplayInput({ params }) {
const paramKeys = Object.keys(params);
return (
<Jumbotron>
{paramKeys.map((key) => {
return <p key={key}>{key + ": " + params[key]}</p>;
})}
</Jumbotron>
);
}
...
이제 이 두 요소를 응용 프로그램에 가져올 수 있습니다.js는 처리 프로그램을 폼 구성 요소에 전달하고 상태 파라미터를 디스플레이 구성 요소에 전달합니다.// App.js
...
import DisplayInput from "./Components/DisplayInput";
import InputForm from "./Components/InputForm";
...
return (
<Container>
<Col lg="5">
<h1>Generate Unique IDs Demo</h1>
<InputForm handleChange={handleChange} />
<DisplayInput params={params} />
</Col>
</Container>
);
...
npm start를 실행할 때 입력한 이름과 값이 Jumbotron에 표시되는 것을 볼 수 있을 것입니다.문제.
같은 프로세서로 같은 폼 구성 요소를 다시 사용하려고 할 때 문제가 됩니다.우리 프로그램에서js, 폼 구성 요소를 다시 보여 줍니다.
// App.js
...
return (
<Container>
<Col lg="5">
<h1>Generate Unique IDs Demo</h1>
<InputForm handleChange={handleChange} />
<InputForm handleChange={handleChange} />
<DisplayInput params={params} />
</Col>
</Container>
);
...
다음 그림에서는 매개변수 prop이 두 양식 구성 요소에서 입력한 내용을 구분하지 않습니다.우리는 단독 폼 처리 함수를 작성해서 이 문제를 해결할 수 있다.하지만 폼 구성 요소를 여러 번 사용하고 싶다고 가정하십시오.모든 폼에 전달할 단독 함수를 만들어야 합니다.
사용자 정의 UseMoom 갈고리 만들기
useMemo는react에 포함된 갈고리입니다. 기억된 값을 되돌려줍니다.이것은 의존항 하나가 변할 때만 촉발할 수 있다는 것을 의미한다.이는 전달된 값이 변하지 않으면 다시 렌더링할 때마다 비용이 많이 드는 방법을 다시 계산하지 않는다는 것을 의미한다.react hooks docshere에서 더 많은 정보를 얻을 수 있습니다.
새 디렉토리에서 사용자 정의useUniqueId를 만듭니다.js 갈고리 파일입니다.우리는 변수를 만들고 id 생성기 함수와 빈 그룹을 USEMO에 전달할 것입니다.useEffect와 연결된 것처럼 빈 그룹은 useMemo의 모든 구성 요소 렌더링이 한 번만 터치된다는 것을 알려 줍니다.마지막으로, 우리의 갈고리는 원소명 접미사를 가진 유일한 id를 되돌려줍니다.
// useUniqueId.js
...
import { useMemo } from "react";
const shortid = require("shortid");
const useUniqueId = () => {
const uniqueId = useMemo(() => shortid.generate(), []);
return (elementNameSuffix) => `${uniqueId}_${elementNameSuffix}`;
};
export default useUniqueId;
...
현재, 사용자 정의useUniqueId 갈고리를 폼 구성 요소로 가져와 폼 요소의name 속성에 전달할 수 있습니다.// useUniqueId.js
...
import { Form } from "react-bootstrap";
import useUniqueId from "../helpers/useUniqueId";
export default function InputForm({ handleChange }) {
const generateId = useUniqueId();
return (
<Form className="mb-2">
<Form.Group>
<Form.Label>Email</Form.Label>
<Form.Control
type="email"
placeholder="Enter email"
name={generateId("email")}
onChange={handleChange}
/>
</Form.Group>
<Form.Group>
<Form.Label>Name</Form.Label>
<Form.Control
type="text"
placeholder="Enter Name"
name={generateId("name")}
onChange={handleChange}
/>
</Form.Group>
</Form>
);
}
...
마지막으로, 프로그램을 다시 실행하고 결과를 봅시다.보시다시피, 현재 우리의 매개 변수는 서로 유일하게 구분할 수 있습니다. 우리가 폼 구성 요소를 몇 번을 렌더링하든지 상관없습니다.
축하합니다!!
이제 매개 변수가 분실되거나 겹쳐지지 않도록 폼 구성 요소를 여러 번 렌더링할 수 있습니다.우리의 맞춤형 갈고리는 모든 구성 요소에서 다시 사용하고자 하는 속성에 사용할 수 있습니다.
전체 코드here와 실제 프레젠테이션here을 볼 수 있습니다.
Reference
이 문제에 관하여(UseMoom을 사용하여 탄성 어셈블리 생성하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joefstack/creating-reusable-components-with-usememo-ikb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)