perf: improve inputbar button memorization

This commit is contained in:
one 2025-05-01 17:19:01 +08:00 committed by 亢奋猫
parent a068d36f87
commit 3a496a7d1f
4 changed files with 9 additions and 8 deletions

View File

@ -799,13 +799,13 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
} }
}, [assistant, model, updateAssistant]) }, [assistant, model, updateAssistant])
const onMentionModel = (model: Model) => { const onMentionModel = useCallback((model: Model) => {
setMentionModels((prev) => { setMentionModels((prev) => {
const modelId = getModelUniqId(model) const modelId = getModelUniqId(model)
const exists = prev.some((m) => getModelUniqId(m) === modelId) const exists = prev.some((m) => getModelUniqId(m) === modelId)
return exists ? prev.filter((m) => getModelUniqId(m) !== modelId) : [...prev, model] return exists ? prev.filter((m) => getModelUniqId(m) !== modelId) : [...prev, model]
}) })
} }, [])
const onToggleExpended = () => { const onToggleExpended = () => {
if (textareaHeight) { if (textareaHeight) {

View File

@ -3,7 +3,7 @@ import { useAppSelector } from '@renderer/store'
import { KnowledgeBase } from '@renderer/types' import { KnowledgeBase } from '@renderer/types'
import { Tooltip } from 'antd' import { Tooltip } from 'antd'
import { FileSearch, Plus } from 'lucide-react' import { FileSearch, Plus } from 'lucide-react'
import { FC, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react' import { FC, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router' import { useNavigate } from 'react-router'
@ -93,4 +93,4 @@ const KnowledgeBaseButton: FC<Props> = ({ ref, selectedBases, onSelect, disabled
) )
} }
export default KnowledgeBaseButton export default memo(KnowledgeBaseButton)

View File

@ -10,7 +10,7 @@ import { Avatar, Tooltip } from 'antd'
import { useLiveQuery } from 'dexie-react-hooks' import { useLiveQuery } from 'dexie-react-hooks'
import { first, sortBy } from 'lodash' import { first, sortBy } from 'lodash'
import { AtSign, Plus } from 'lucide-react' import { AtSign, Plus } from 'lucide-react'
import { FC, useCallback, useImperativeHandle, useMemo } from 'react' import { FC, memo, useCallback, useImperativeHandle, useMemo } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router' import { useNavigate } from 'react-router'
import styled from 'styled-components' import styled from 'styled-components'
@ -143,7 +143,8 @@ const MentionModelsButton: FC<Props> = ({ ref, mentionModels, onMentionModel, To
) )
} }
export default MentionModelsButton
const ProviderName = styled.span` const ProviderName = styled.span`
font-weight: 500; font-weight: 500;
` `
export default memo(MentionModelsButton)

View File

@ -7,7 +7,7 @@ import { Assistant, WebSearchProvider } from '@renderer/types'
import { hasObjectKey } from '@renderer/utils' import { hasObjectKey } from '@renderer/utils'
import { Tooltip } from 'antd' import { Tooltip } from 'antd'
import { Globe, Settings } from 'lucide-react' import { Globe, Settings } from 'lucide-react'
import { FC, useCallback, useImperativeHandle, useMemo } from 'react' import { FC, memo, useCallback, useImperativeHandle, useMemo } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router-dom' import { useNavigate } from 'react-router-dom'
@ -126,4 +126,4 @@ const WebSearchButton: FC<Props> = ({ ref, assistant, ToolbarButton }) => {
) )
} }
export default WebSearchButton export default memo(WebSearchButton)