IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react router v6在 redux mapStateToProps函数中获取 url中params参数 -> 正文阅读

[JavaScript知识库]react router v6在 redux mapStateToProps函数中获取 url中params参数

在 v5 版本中,可用如下方法直接获取


const mapStateToProps = (state, ownProps) => {
  let params = ownProps.match.params;
  return {
    ...
  }
}

在v6版本中,需要通过useParams hook函数获取,但是如果直接在 mapStateToProps函数中使用,则会报错

import { useParams } from "react-router-dom"
const mapStateToProps = (state, ownProps) => {
  console.log(useParams())
  return {
     ...
  }
}

React Hook "useParams" is called in function "mapStateToProps" that is neither a React function component nor a custom React Hook function.

这时候我们需要自定义一个?WithRouter(不同于v5 版本的 withRouter) 的高阶组件,

import { useParams, useLocation } from "react-router-dom"

export default function WithRouter(Child) {
  return function WithRouter(props) {
    const params = useParams();
    const location = useLocation();
    return <Child {...props} params={params} location={location} />
  }
}

post.js 文件

import React, { Component } from "react";
import { connect } from 'react-redux';
import WithRouter from '../hoc/WithRouter';

class Post extends Component {
  render() {
    return (
      <div className="container">
        {this.props.post ? (
          <div className="post">
            <h4 className="center">{ this.props.post.title }</h4>
            <p>{ this.props.post.body }</p>
          </div>
        ) : (
          <div className="container">文章正在加载...</div>
        )}
      </div>
    )
  }
}

const mapStateToProps = (state, ownProps) => {
  console.log(ownProps);
  let id = ownProps.params.post_id;
  return {
    post: state.posts.find(post => post.id == id)
  }
}

export default WithRouter(connect(mapStateToProps)(Post));

ownProps打印如下

?这样,在mapStateToProps函数中就可以获取到对应的 路由中的参数,然后去做相应的逻辑处理。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:23:13  更:2022-03-12 17:25:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:38:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码