perf: reduce re-renders in NoteList

This commit is contained in:
codytseng
2025-11-07 23:22:28 +08:00
parent 1e2385da3b
commit f28e920e15

View File

@@ -47,7 +47,7 @@ const NoteList = forwardRef(
hideUntrustedNotes = false, hideUntrustedNotes = false,
areAlgoRelays = false, areAlgoRelays = false,
showRelayCloseReason = false, showRelayCloseReason = false,
pinnedEventIds = [], pinnedEventIds,
filterFn filterFn
}: { }: {
subRequests: TFeedSubRequest[] subRequests: TFeedSubRequest[]
@@ -82,7 +82,7 @@ const NoteList = forwardRef(
const shouldHideEvent = useCallback( const shouldHideEvent = useCallback(
(evt: Event) => { (evt: Event) => {
const pinnedEventHexIdSet = new Set() const pinnedEventHexIdSet = new Set()
pinnedEventIds.forEach((id) => { pinnedEventIds?.forEach((id) => {
try { try {
const { type, data } = decode(id) const { type, data } = decode(id)
if (type === 'nevent') { if (type === 'nevent') {
@@ -110,7 +110,7 @@ const NoteList = forwardRef(
return false return false
}, },
[hideUntrustedNotes, mutePubkeySet, pinnedEventIds, isEventDeleted, filterFn] [hideUntrustedNotes, mutePubkeySet, JSON.stringify(pinnedEventIds), isEventDeleted, filterFn]
) )
const filteredNotes = useMemo(() => { const filteredNotes = useMemo(() => {
@@ -311,7 +311,7 @@ const NoteList = forwardRef(
return () => { return () => {
promise.then((closer) => closer()) promise.then((closer) => closer())
} }
}, [JSON.stringify(subRequests), refreshCount, showKinds]) }, [JSON.stringify(subRequests), refreshCount, JSON.stringify(showKinds)])
useEffect(() => { useEffect(() => {
const options = { const options = {
@@ -373,9 +373,7 @@ const NoteList = forwardRef(
const list = ( const list = (
<div className="min-h-screen"> <div className="min-h-screen">
{pinnedEventIds.map((id) => ( {pinnedEventIds?.map((id) => <PinnedNoteCard key={id} eventId={id} className="w-full" />)}
<PinnedNoteCard key={id} eventId={id} className="w-full" />
))}
{filteredNotes.map(({ key, event, reposters }) => ( {filteredNotes.map(({ key, event, reposters }) => (
<NoteCard <NoteCard
key={key} key={key}