问题:react函数中的state是上一次的值

devtools/2024/11/14 12:59:31/

场景

在这里插入图片描述
有一个聊天输入框组件,输入框上面有表情包组件。
通过redux创建了store,存储一个message的状态,用于表情包和输入框共享状态。
输入框通过设置value和onClick做了一个简单双向绑定,其中value的值为store里的message。

import { update } from "@/features/messageSlice";
import { useStoreSelector, useStoreDispatch } from "@/hooks/store";
const ChatInput: React.FC = () => {const message = useStoreSelector((state) => state.message.value);const dispatch = useStoreDispatch();return (<textareavalue={message}onChange={(e) => {const val = (e.target as HTMLTextAreaElement).value;dispatch(update(val));}}className="chatInput"style={{width: "100%",resize: "none",outline: "none",border: "none",}}></textarea>);
};
export default ChatInput;

表情包组件做了一个方法,选择表情包时通过回调传回值与message值做拼接,结果message值为上一次的值

  const message = useStoreSelector((state) => state.message.value);console.log("message1", message);const dispatch = useStoreDispatch();const onSelectContent = (ct: any) => {console.log("message2", message);dispatch(update(message + ct.emoji));//message为上一次的值};retu

结果:当我输入一段文字后,添加一个表情包,再输入一段文字,再添加一个表情包时。。就会覆盖掉前一段文字。

个人尝试:设置一个state存储选择的表情包,然后通过useEffect监听state的变化更新message。结果出现新bug,那就是不能重复选择表情包,因为state不改变导致useEffect不执行


http://www.ppmy.cn/devtools/6424.html

相关文章

5G网络建设--并查集--最小生成树

题目描述 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N&#xff0c;接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间假设光纤的成本各不相同&#xff0c;且有些节点之间已经存在光纤相…

CentOS系统常用命令

CentOS系统是基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;的流行Linux发行版&#xff0c;它在服务器和桌面环境中广泛使用。以下是一些在CentOS系统中常用的命令及其用法&#xff1a; 1. **文件和目录操作** - ls&#xff1a;列出目录内容ls -lh # 以易读的格式…

TensorFlow 的基本概念和使用场景

TensorFlow 的基本概念和使用场景 TensorFlow 是一个开源的机器学习框架&#xff0c;由 Google 的 Google Brain 团队开发。它广泛用于数据科学、机器学习、深度学习和其他相关领域。以下是一篇关于 TensorFlow 的基本概念和使用场景的概述文章。 1. TensorFlow 简介 Tensor…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库七、如果是私有仓库可能会拉取失败&#xff08;一&#xff09;需要增加SSH 公钥&#xff08;二&#xff09;把远程仓库地址换成ssh的连接八、如果是私有仓库&#xff…

STM32 CAN控制的相关结构体(标准库)

STM32 CAN控制的相关结构体&#xff08;标准库&#xff09; 初始化结构体&#xff1a; CAN_InitTypeDef CAN_Prescaler 本成员设置CAN外设的时钟分频&#xff0c;它可控制时间片Tq的时间长度&#xff0c;这里设置的值最终会减1后再写入BRP寄存器位&#xff0c;即前面介绍的Tq计…

5.11 mybatis之returnInstanceForEmptyRow作用

文章目录 1. 当returnInstanceForEmptyRowtrue时2 当returnInstanceForEmptyRowfalse时 mybatis的settings配置中有个属性returnInstanceForEmptyRow&#xff0c;该属性新增于mybatis的3.4.2版本&#xff0c;低于此版本不可用。该属性的作用官方解释为&#xff1a;当返回行的所…

部署分布式LNMP系统

一、基础环境配置 主机名IP地址服务系统php192.168.235.140php-8.1.11CentOS 7nginx192.168.235.141nginx-1.20.2CentOS 7mysql one192.168.235.142mysql-5.7.38CentOS 7mysql two192.168.235.143mysql-5.7.38CentOS 7 相关服务目录说明 nginx根目录&#xff1a;/usr/local/…

Flutter 的 showDialog 和 showCupertinoDialog 有什么区别?

我将我的 App 里用的 Flutter 升级到了 3.19&#xff0c;没想到&#xff0c;以前我用 showDialog 和 AlertDialog 组合创建的二次确认框&#xff0c;变得无敌难看了&#xff0c;大幅度增加了整个框的圆角和里面默认按钮的圆角。不得已&#xff0c;我必须修改一下&#xff0c;以…