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

场景

有一个聊天输入框组件,输入框上面有表情包组件。

通过redux创建了store,存储一个message的状态,用于表情包和输入框共享状态。

输入框通过设置value和onClick做了一个简单双向绑定,其中value的值为store里的message。

js 复制代码
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 (
    <textarea
      value={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值为上一次的值

js 复制代码
  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不执行

相关推荐
zandy10111 小时前
衡石 Agentic BI的ReAct 推理框架在 Agentic BI 中的工程化实践
前端·javascript·react.js
郝亚军2 小时前
webstorm如何创建vue 3.js
javascript·vue.js·webstorm
এ慕ོ冬℘゜2 小时前
jQuery attr() 方法超详细讲解:属性获取、赋值、实战踩坑全解
前端·javascript·jquery
Hilaku3 小时前
为什么大厂对前端算法要求极高?
前端·javascript·程序员
你可如意3 小时前
从Promise开始,一篇让你彻底建立起JS的异步编程模型
javascript
用户84298142418103 小时前
AI时代,JS混淆加密还有用吗?
前端·javascript
labixiong4 小时前
React Compiler 用 Rust 重写了,编译提速 10 倍——手写 useMemo 的日子到头了
react.js·rust
申君健24864182772024 小时前
MCP TypeScript SDK v2 完整升级变化说明
javascript
Ivanqhz4 小时前
Rust Lazy浅析
java·javascript·rust
铁皮饭盒5 小时前
面试官:如何用 Bun + JS 实现安全的文件 MCP 工具集
前端·javascript·后端