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

React BrowserRouter使用location.state传参时location未定义问题

问题原因及修复方案

  • 1 App.tsx中/order-form对应的Route使用render属性渲染时,未传递路由原生props,导致路由属性无法注入组件
  • 2 OrderForm函数组件的入参写法错误,React函数组件仅接收一个props参数,拆分两个参数会导致路由属性无法正常获取
  • 3 未处理state不存在的边界场景,直接读取属性容易报错

第一步:修改App.tsx中的Route配置

给render回调添加路由props参数,并透传给OrderForm组件:

<Route path="/order-form" render={(routerProps) => (
    <OrderForm {...routerProps} {...userData} />
)} exact/>

第二步:修正OrderForm组件的参数写法

所有属性都从唯一的props参数中解构,同时添加可选链做边界兼容:

const OrderForm: React.FunctionComponent<UserData & RouteComponentProps<{}, StaticContext, LocationState>> = (props) =>  {
    // 从props中解构所有需要的属性
    const { mail, location, ...restUserData } = props;

    const onSubmit = (data: FormValues) => {
        const Calculator = new CalculatorService(restUserData)
        console.log("Works",data)
    }

    return <OrderFormElements 
                mail={mail} 
                // 加可选链避免state不存在时报错
                savedOrderData={location.state?.savedOrder} 
                onSubmit={onSubmit} />
}

内容的提问来源于stack exchange,提问作者Max Pan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:01