ant-design / pro-chat

🤖 Components Library for Quickly Building LLM Chat Interfaces.
https://pro-chat.antdigital.dev
MIT License
685 stars 88 forks source link

🐛[BUG] actionsRender,写了一个点赞、点踩,点击更新className高亮,没生效 #253

Closed spiderT closed 3 months ago

spiderT commented 3 months ago

🐛 bug 描述

actionsRender,写了一个点赞、点踩,点击更新className高亮,没生效

📷 复现步骤

actionsRender,写了一个点赞、点踩,点击更新className高亮,没生效

🏞 期望结果

在 actionsRender 里面打印feedbacks 没更新,但是外层feedbacks字段更新了

💻 复现代码

const [feedbacks, setFeedbacks] = useState<{}>({});

const submitFeedback = (type, id) => {

setFeedbacks({ ...feedbacks, id: type })

}

<ThumbsUp theme="outline" className={btn-icon ${feedbacks[id] === 'THUMB_UP' ? 'active' : ''}} onClick={() => submitFeedback('THUMB_UP', id)} />

spiderT commented 3 months ago

动态点赞更新className高亮,没生效,但是历史记录进来,是生效的。

问题貌似是,actionsRender 不支持动态更新,源码里这段useMemo的依赖项actions,组件使用时,应该怎么处理actions,可以让它动态更新

const actionsDom = useMemo(() => { if (chatItemRenderConfig?.actionsRender === false) return null; if (error) return null; const dom = ( <Actions actions={actions} className={${cx(styles.actions,${prefixClass}-list-item-actions)}} /> ); return chatItemRenderConfig?.actionsRender?.(props, dom) || dom; }, [actions]);

songhanlin commented 3 months ago

我是重写了ActionIconGroup, 实现了效果, 大概如下 const [cacheFeedback, setCacheFeedback] = useState(feedback || 0); const items: ActionIconGroupProps["items"] = [ { icon: () => { return ( <ThumbsUp size="12" color={cacheFeedback == 1 ? "#ff6600" : "rgba(0, 0, 0, 0.45)"} /> ); }, key: "thumbs-up", label: "赞", }]

spiderT commented 3 months ago

我是重写了ActionIconGroup, 实现了效果, 大概如下 const [cacheFeedback, setCacheFeedback] = useState(feedback || 0); const items: ActionIconGroupProps["items"] = [ { icon: () => { return ( <ThumbsUp size="12" color={cacheFeedback == 1 ? "#ff6600" : "rgba(0, 0, 0, 0.45)"} /> ); }, key: "thumbs-up", label: "赞", }]

感谢,用这个方法可以解决