다른 React.useCallback 내에서 React.useCallback을 사용할 수 있나요?
<p>유일한 정보는 다음과 같습니다</p>
<p>
<pre class="brush:js;toolbar:false;">"react"에서 React 가져오기;
const User = React.memo(function({id, name, isSelected, ...other}) {
반품 (
<div {...기타}>
{이름} - {선택됨 && "선택된"}
</div>
);
});
기본 사용자 내보내기;</pre>
</p>
<p>以及渲染用户卡的父组件</p>
<p>
<pre class="brush:js;toolbar:false;">"react"에서 React 가져오기;
함수 애플리케이션() {
const [사용자, setUsers] = React.useState([
{id: 1, 이름: "John Doe #1"},
{id: 2, 이름: "John Doe #2"},
{ID: 3, 이름: "John Doe #3"}
]);
const [selectedUserId, setSelectedUserId] = React.useState(null);
return users.map((사용자) => {
const isSelected = selectedUserId === user.id;
반품 (
<사용자
{...사용자}
키={user.id}
isSelected={isSelected}
onClick={() => setSelectedUserId(user.id)}
/>
);
});
}
기본 애플리케이션 내보내기;</pre>
</p>
<p>任务是''选择用户后避免卡新渲染其他用户卡'</p>
<p>我尝试使用 <code>React.useCallback</code> 钩子,这是我的第一个实现</p>
<p>
<pre class="brush:js;toolbar:false;">"react"에서 React 가져오기;
const User = React.memo(function({id, name, isSelected, ...other}) {
반품 (
<div {...기타}>
{이름} - {선택됨 && "선택된"}
</div>
);
});
함수 애플리케이션() {
const [사용자, setUsers] = React.useState([
{id: 1, 이름: "John Doe #1"},
{id: 2, 이름: "John Doe #2"},
{ID: 3, 이름: "John Doe #3"}
]);
const [selectedUserId, setSelectedUserId] = React.useState(null);
const handlerSelectUser = React.useCallback((userId) => () => {
setSelectedUserId(userId);
}, []);
return users.map((사용자) => {
const isSelected = selectedUserId === user.id;
반품 (
<사용자
{...사용자}
키={user.id}
isSelected={isSelected}
onClick={handleSelectUser(user.id)}
/>
);
});
}
기본 애플리케이션 내보내기;</pre>
</p>
<p>이 경우 <code>React.useCallback</code>
<p><strong>결과: 클릭할 때마다 모든 사용자 카드가 여전히 다시 렌더링됩니다</strong></p>
<p>저는 이 익명 함수를 <code>React.useCallback</code></p>에 래핑하기로 결정했습니다.
<p>
<pre class="brush:js;toolbar:false;">"react"에서 React 가져오기;
const User = React.memo(function({id, name, isSelected, ...other}) {
반품 (
<div {...기타}>
{이름} - {선택됨 &&"선택됨"}
</div>
);
});
함수 애플리케이션() {
const [사용자, setUsers] = React.useState([
{id: 1, 이름: "John Doe #1"},
{id: 2, 이름: "John Doe #2"},
{ID: 3, 이름: "John Doe #3"}
]);
const [selectedUserId, setSelectedUserId] = React.useState(null);
const handlerSelectUser = React.useCallback((userId) => {
return React.useCallback(() => {
setSelectedUserId(userId);
}, []);
}, []);
return users.map((사용자) => {
const isSelected = selectedUserId === user.id;
반품 (
<사용자
{...사용자}
키={user.id}
isSelected={isSelected}
onClick={handleSelectUser(user.id)}
/>
);
});
}
기본 애플리케이션 내보내기;</pre>
</p>
<p>문제는 해결됐지만 아직 한 가지 의문이 남네요. 제가 제대로 한 걸까요? React 팀에서는 다음과 같이 말합니다. <em>루프, 조건문 또는 중첩 함수 내에서 Hooks를 호출하지 마세요</em> 어떤 부작용이 발생하나요? </p>
<p><code>user</code>구성요소</p>를 건드리지 마세요.