You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Context跨路由传值异常:/play路由无法获取clickedSituation

问题解决方案

1. 修复Context Provider的value传递错误

你的SituationProvider中,value属性使用了逗号表达式,这会导致实际传递给Context的只有最后一个值markSituationComplete,clickedSituation并未正确传入。需要将值包装成对象:

修改SituationProvider的返回部分:

return (
  <SituationContext.Provider value={{ clickedSituation, markSituationComplete }}>
    {children}
  </SituationContext.Provider>
)

2. 确保组件正确消费Context

在Play组件中,通过useContext正确获取Context值:

import { useContext } from 'react';
import { SituationContext } from './path-to-your-context-file';

function Play() {
  const { clickedSituation } = useContext(SituationContext);
  
  // 现在可正常访问状态值
  console.log(clickedSituation);
  
  return (
    // 组件内容
  );
}

3. 可选:处理路由刷新导致的状态丢失

如果管理员点击场景后通过页面跳转(刷新页面)进入/mockrbi/play,React Context的状态会因应用重置而丢失,可通过localStorage持久化状态:

  • 设置状态时同步存储:
    const markSituationComplete = (situation) => {
      setClickedSituation(situation);
      localStorage.setItem('clickedSituation', JSON.stringify(situation));
    }
    
  • 初始化状态时从本地存储读取:
    const [clickedSituation, setClickedSituation] = useState(() => {
      const saved = localStorage.getItem('clickedSituation');
      return saved ? JSON.parse(saved) : null;
    });
    

内容的提问来源于stack exchange,提问作者Preet Sojitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:10:23