react-router 的参数render、component、children

component 最常用,只有匹配 location 才会加载 component 对应的 React组件。props更新,会重新加载组件
render 路由匹配函数就会调用。
children 不管路由是否匹配都会渲染对应组件。props更新,不会重新加载组件

优先级:children>component>render

// props更新,不会重新加载组价
<Route path="/c2" component={RouteTestChild2}></Route>
// props更新,会重新加载组价
<Route path="/c2" component={()=>{return <RouteTestChild2></RouteTestChild2>}}></Route>
// props更新,不会重新加载组价
<Route path="/c1/:name" render={()=>{ return <RouteTestChild1 num={this.state.num}></RouteTestChild1>}}></Route>
// props更新,不会重新加载组价
<Route path="/c3/:name" children={()=>{ return <RouteTestChild3 num={this.state.num}></RouteTestChild3>}}></Route>

React 核心渲染代码

 return (
          <RouterContext.Provider value={props}>
              {match // 是否与地址匹配
                ? children // 1.优先判断children是否存在
                  ? typeof children === 'function' // 存在情况下判断children是否是个函数
                    ? children(props)
                    : children
                  : component // 2.判断是否是一个component,
                  ? React.createElement(component.props) // 是, 创建一个元素
                  : render // 3. 判断是否是render属性; render传入是一个函数
                  ? render(props) // 执行render
                  : null // 否, 输出是空的
               
                : children // 不匹配,判断是否是有children
                ? typeof children === 'function' // 判断children是否是个函数
                  ? children(props) // 执行函数
                  : children // 组件直接渲染
                : null}
            </RouterContext.Provider>
          )
     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值