useState의 무거운 작업에 대한 초기화 #27
yunseorim1116
started this conversation in
Ideas
Replies: 3 comments 6 replies
-
import React, { useState } from 'react';
// 무거운 작업 함수
const heavyWork = () => {
console.log('엄청 무거운 작업!!!');
return ['홍길동', '김땡떙'];
};
function App() {
const [names, setNames] = useState(heavyWork()); // 초기 상태를 heavyWork()의 결과로 설정
const [input, setInput] = useState('');
// 입력 변경 핸들러
const handleInputChange = (e) => {
setInput(e.target.value);
};
// 업로드 핸들러
const handleUpload = () => {
setNames((prevState) => {
console.log('이전 state: ', prevState);
return [input, ...prevState]; // input을 names 배열의 앞에 추가
});
setInput(''); // 입력 필드 초기화
};
return (
<div>
<input type="text" value={input} onChange={handleInputChange} />
<button onClick={handleUpload}>Upload</button>
<ul>
{names.map((name, index) => (
<li key={index}>{name}</li> // 이름 리스트 렌더링
))}
</ul>
</div>
);
}
export default App; |
Beta Was this translation helpful? Give feedback.
1 reply
-
이렇게 변경해주면 ?import React, { useState } from 'react';
// 무거운 작업 함수
const heavyWork = () => {
console.log('엄청 무거운 작업!!!');
return ['홍길동', '김땡떙'];
};
function App() {
_**const [names, setNames] = useState(()=> heavyWork());**_
const [input, setInput] = useState('');
// 입력 변경 핸들러
const handleInputChange = (e) => {
setInput(e.target.value);
};
// 업로드 핸들러
const handleUpload = () => {
setNames((prevState) => {
console.log('이전 state: ', prevState);
return [input, ...prevState]; // input을 names 배열의 앞에 추가
});
setInput(''); // 입력 필드 초기화
};
return (
<div>
<input type="text" value={input} onChange={handleInputChange} />
<button onClick={handleUpload}>Upload</button>
<ul>
{names.map((name, index) => (
<li key={index}>{name}</li> // 이름 리스트 렌더링
))}
</ul>
</div>
);
}
export default App; |
Beta Was this translation helpful? Give feedback.
3 replies
-
|
위와 같은 상황이 발생하는 이유를 추가적으로 설명하자면 자바스크립트의 함수 실행 순서에 의해서 발생하는 것 같습니다! 첫 번째 방식const [names, setNames] = useState(heavyWork());이 코드가 실행되는 순서를 살펴보면
즉, React의 useState가 호출되기 전에 이미 두 번째 방식const [names, setNames] = useState(() => heavyWork());
|
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment


Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
useState 무거운 작업에 대한 초기화
Beta Was this translation helpful? Give feedback.
All reactions