Zusstand로 상태 관리를 매우 빠르게 반응
소개
헤이 여러분,
이 튜토리얼에서는 놀라운 React State Management Library인 Zusstand를 구현할 것입니다.
이 튜토리얼에서 우리가 만들 것의 미리보기 -
초기 설정
따라서 이 튜토리얼을 시작하기 위해 TailwindCSS 및 NextUI가 포함된 Next.js 앱인 몇 가지 초기 설정을 수행할 것입니다.
Next.js 앱을 만들어 보겠습니다.
npx create-next-app your-project-name
그런 다음 프로젝트를 cd하고 tailwindCSS를 설치합니다.
프로젝트에 TailwindCSS를 설치하려면 이 설치 가이드를 따를 수 있습니다.
설치 안내서 - https://tailwindcss.com/docs/guides/nextjs
따라서 일단 TailwindCSS 설정이 있으면 됩니다.
다음 명령을 사용하여 NextUI를 설치해 보겠습니다.
npm install @nextui-org/react
자, 이제 이 튜토리얼과 함께 따라야 할 모든 것이 있습니다.
앱의
index.js
로 이동하여 앱의 UI를 만들어 보겠습니다.Index.js
-import { Button, Input, Card } from "@nextui-org/react";
import {useState} from "react";
export default function Home() {
const [newtodo, setNewTodo] = useState("");
return (
<div className="container text-black mx-auto flex flex-col items-center p-28">
<div className="w-full">
<h1 className="text-3xl">Todo</h1>
</div>
<div className="mt-2 flex items-center w-full">
<Input
value={newtodo}
onChange={(e) => setNewTodo(e.target.value)}
fullWidth
placeholder="Enter TODO"
clearable
/>
<Button shadow className="m-2">
ADD
</Button>
</div>
<div className="mt-5 w-full flex items-center">
<Card className="w-full">
<Card.Body>Todo One</Card.Body>
</Card>
<Button
size="lg"
shadow
auto
color="error"
className="m-2"
>
Delete
</Button>
</div>
</div>
);
}
화면에 다음과 같은 내용이 표시됩니다.
Zusstand 구현
이제 앱에 Zusstand를 추가해 보겠습니다.
그러기 위해서는 앱 내부에
store.js
를 생성해야 합니다.저희 가게에는 세 가지가 있습니다.
todos:[]
: 이 배열은 모든 할일을 추적하고 할일을 렌더링하는 데 도움이 됩니다.addTodo
: addTodo
는 todos 배열에 새 todo를 추가하는 데 도움이 됩니다. 인수로 todo
를 취하고 이전 상태(...state.todos
)를 전파하고 새todo
를 추가합니다. 끝.removeTodo
: 이 기능은 제공된 인덱스로 특정todo
을 삭제하는 데 도움이 됩니다.다음은 우리의 코드입니다
store.js
-import create from "zustand";
const useStore = create((set) => ({
todos: [],
todo: "",
addTodo: (todo) => set((state) => ({ todos: [...state.todos, todo] })),
removeTodo: (index) =>
set((state) => ({ todos: state.todos.filter((_, i) => i !== index) })),
}));
export default useStore;
좋아, 이제 우리 가게가 생겼어.
모든 것을 바인딩하고 앱에서 사용합시다.
index.js
로 돌아가기 -"../store.js"에서 가져오기
useStore
import useStore from "../store";
좋습니다. 이제 스토어를 가져왔으니 현재
todos
와 모든 로직을 처리하는 함수를 가져오겠습니다.
const todos = useStore((state) => state.todos);
const addTodo = useStore((state) => state.addTodo);
const removeTodo = useStore((state) => state.removeTodo);
모든 것을 연결하고 모든 것이 작동하는지 확인합시다.
index.js
-import { Button, Input, Card } from "@nextui-org/react";
import { useState } from "react";
import useStore from "../store";
export default function Home() {
const [newtodo, setNewTodo] = useState("");
const todos = useStore((state) => state.todos);
const addTodo = useStore((state) => state.addTodo);
const removeTodo = useStore((state) => state.removeTodo);
// this function will check if the input is valid or not
const AddNewTodo = () => {
if (newtodo.length > 0) {
addTodo(newtodo);
setNewTodo("");
}
};
return (
<div className="container text-black mx-auto flex flex-col items-center p-28">
<div className="w-full">
<h1 className="text-3xl">Todo</h1>
</div>
<div className="mt-2 flex items-center w-full">
<Input
value={newtodo}
onChange={(e) => setNewTodo(e.target.value)}
fullWidth
placeholder="Enter TODO"
clearable
></Input>
<Button onClick={AddNewTodo} shadow className="m-2">
ADD
</Button>
</div>
// Map all the current Todos
{todos.map((todo, index) => (
<div key={index} className="mt-5 w-full flex items-center">
<Card className="w-full">
<Card.Body>{todo}</Card.Body>
</Card>
<Button
onClick={() => removeTodo(index)}
size="lg"
shadow
auto
color="error"
className="m-2"
>
Delete
</Button>
</div>
))}
</div>
);
}
모든 것을 연결한 후 새로운 할일을 생성하고 할일을 삭제할 수 있습니다.
엄청난!
이제 Zusstand가 앱에서 작업 중입니다.
보너스
앱의 이 부분은 완전히 선택 사항입니다.
단 3줄의 코드로 애니메이션을 추가하는 데 도움이 되는 멋진 애니메이션 라이브러리를 찾고 싶다면 이 과정을 살펴볼 수 있습니다.
의 시작하자,
멋진 애니메이션을 추가하여 할 일 앱을 더욱 멋지게 만들고 싶습니다.
이를 위해
auto-animate
를 사용할 것입니다. 이것은 formkit의 놀라운 애니메이션 라이브러리입니다.우리는
useEffect
에서 useRef
, react
및 auto-animate
에서 @formkit/auto-animate
를 가져올 것입니다.이것들을 가져온 후,
임의의 이름으로 ref를 생성합니다. 저는 그것을 부모라고 부릅니다.
const parent = useRef(null);
그런 다음
useEffect
후크에서 parent
를 종속성으로 추가하고 parent.current
를 autoAnimate
로 전달할 것입니다. useEffect(() => {
parent.current && autoAnimate(parent.current);
}, [parent]);
좋습니다. 마지막으로 해야 할 일은 부모 요소에 ref를 추가하는 것입니다.
이것은 전체 코드가 다음과 같이 보일 것입니다.
index.js
import { Button, Input, Card } from "@nextui-org/react";
import { useEffect, useState, useRef } from "react";
import useStore from "../store";
import autoAnimate from "@formkit/auto-animate";
export default function Home() {
const parent = useRef(null);
const [newtodo, setNewTodo] = useState("");
const todos = useStore((state) => state.todos);
const addTodo = useStore((state) => state.addTodo);
const removeTodo = useStore((state) => state.removeTodo);
const AddNewTodo = () => {
if (newtodo.length > 0) {
addTodo(newtodo);
setNewTodo("");
}
};
useEffect(() => {
parent.current && autoAnimate(parent.current);
}, [parent]);
return (
<div
className="container text-black mx-auto flex flex-col items-center p-28"
// here we are using our parent ref
ref={parent}
>
<div className="w-full">
<h1 className="text-3xl">Todo</h1>
</div>
<div className="mt-2 flex items-center w-full">
<Input
value={newtodo}
onChange={(e) => setNewTodo(e.target.value)}
fullWidth
placeholder="Enter TODO"
clearable
></Input>
<Button onClick={AddNewTodo} shadow className="m-2">
ADD
</Button>
</div>
{todos.map((todo, index) => (
<div key={index} className="mt-5 w-full flex items-center">
<Card className="w-full">
<Card.Body>{todo}</Card.Body>
</Card>
<Button
onClick={() => removeTodo(index)}
size="lg"
shadow
auto
color="error"
className="m-2"
>
Delete
</Button>
</div>
))}
</div>
);
}
이제 todo를 추가하고 제거하면 멋진 애니메이션을 볼 수 있습니다.
Github 레포 - https://github.com/chetanverma16/Zustand-tutorial
결론
그게 내가 당신을 위해 가진 전부입니다! 새로운 것을 배웠기를 바랍니다.
이 기사가 마음에 드셨다면 다른 사람들도 찾을 수 있도록 ❤️를 해주세요.
더 많은 콘텐츠를 보려면 Twitter에서 연락을 유지하십시오.
저에게 연락하십시오:
Portfolio | Github | |
Reference
이 문제에 관하여(Zusstand로 상태 관리를 매우 빠르게 반응), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chetanvermaa/react-state-management-very-quickly-with-zustand-6ha텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)