首页 > 其他分享 >rtk(redux)快速实践 创建一个Post part3 显示和编辑单个文章 添加用户 存储文章日期 增加排序和交互功能

rtk(redux)快速实践 创建一个Post part3 显示和编辑单个文章 添加用户 存储文章日期 增加排序和交互功能

时间:2023-02-23 13:12:21浏览次数:53  
标签:const posts rtk part3 文章 组件 import post

啊,标题好长捏。

这篇对应文档这里呢!

经过上一节,我们实践了最基本的rtk维护状态的流程

在 第三节:基本数据流 中,我们看到了如何从一个空的 Redux+React 项目设置开始,添加一个新的状态 slice ,并创建 React 组件 可以从 Redux store 中读取数据并 dispatch action 来更新该数据。我们还研究了数据如何在应用程序中流动,组件 dispatch action,reducer 处理 action 并返回新状态,以及组件读取新状态并重新渲染 UI。
现在您已经了解了编写 Redux 逻辑的核心步骤,我们将使用这些相同的步骤向我们的社交媒体提要添加一些很实用的新功能:查看单个文章、编辑现有文章、详细信息显示文章作者、发布时间戳和交互按钮。

快马加鞭,继续深入捏!

显示单个文章

上一篇中,文章太长,会让页面拉的很长很长,那么就应该让PostList只显示个文章摘要,点击单个文章,就换到单独显示全文的页面

创建单个文章显示页面

加个组件捏,SinglePostPage ,这个要配合路由使用吖!(/posts/123这种形式就是显示123相关的文章呢!这里123我们一般选取postId捏!)

import React from 'react'
import { useSelector } from 'react-redux'

export const SinglePostPage = ({ match }) => {
  const { postId } = match.params

  const post = useSelector(state =>
    state.posts.find(post => post.id === postId)
  )

  if (!post) {
    return (
      <section>
        <h2>页面未找到!</h2>
      </section>
    )
  }

  return (
    <section>
      <article className="post">
        <h2>{post.title}</h2>
        <p className="post-content">{post.content}</p>
      </article>
    </section>
  )
}

要知道吖,React-Router会给渲染的组件传一个match呢,这个match就是地址栏当前的内容呢,比如你点击了一个id为123的文章,要渲染全文的时候,跳转到/posts/123,123这个postId就一定会包含在match里边哦,所以就可以用match到数据源中寻找(这里是到store里边寻找呢)。

要注意的是!useSelector返回值一旦是新的引用,组件一定重渲染,所以为了性能考虑,组件应始终尝试从 store 中选择它们需要的尽可能少的数据,这将有助于确保它仅在实际需要时才渲染。

注意文档上这一段!

您可能会注意到,这看起来与我们在 组件主体中的逻辑非常相似,其中我们遍历整个 posts 数组以显示主要提要的文章摘录。我们可以尝试提取一个可以在两个地方使用的“文章”组件,但是我们在显示文章摘录和整个文章方面已经存在一些差异。即使有一些重复,通常最好还是暂时分开写,然后我们可以稍后决定不同的代码部分是否足够相似,我们可以真正提取出可重用的组件。

这段特有意思!我们在开发时候,肯定会遇到这种情况,很多时候两个组件基本功能一致,就是有点小差别,比如要进行逻辑判断,是xxx就显示x,是yyy就显示y,我以前都会把两个组件直接合并(其实就是只写一个),结果逻辑块儿肯定会越来越多越来越复杂,如果按照文档上的说法,初期不要怕重复,后期再合适地选择要抽取的部分,这个做法真的是很好,因为那个时候,就是顺理成章地在做,会浑然天成吖!

添加单个文章的路由

嗯,SinglePostPage有了,加路由!之前也说过了,要配合路由使用捏!
(注意不同版本ReactRouter的API不同捏!)

import { PostsList } from './features/posts/PostsList'
import { AddPostForm } from './features/posts/AddPostForm'
import { SinglePostPage } from './features/posts/SinglePostPage'

function App() {
  return (
    <Router>
      <Navbar />
      <div className="App">
        <Switch>
          <Route
            exact
            path="/"
            render={() => (
              <React.Fragment>
                <AddPostForm />
                <PostsList />
              </React.Fragment>
            )}
          />
          <Route exact path="/posts/:postId" component={SinglePostPage} />
          <Redirect to="/" />
        </Switch>
      </div>
    </Router>
  )
}

然后更新PostList就好辣,只要加一个Link,然后点击某个文章就能跳转到某个特定文章的全文页面了呢!
(注意和文档不完全一样,核心在领会使用rtk具体怎么操作数据,操作数据的过程怎么和UI组件连接在一起,再加上UI组件怎么和router配合)

import React from 'react'
import { useSelector } from 'react-redux'
import { Link } from 'react-router-dom'

export const PostsList = () => {
  const posts = useSelector(state => state.posts)

  const renderedPosts = posts.map(post => (
    <article className="post-excerpt" key={post.id}>
      <h3>{post.title}</h3>
      <p className="post-content">{post.content.substring(0, 100)}</p>
      <Link to={`/posts/${post.id}`} className="button muted-button">
        View Post
      </Link>
    </article>
  ))

  return (
    <section className="posts-list">
      <h2>Posts</h2>
      {renderedPosts}
    </section>
  )
}

现在可以加个Navbar组件了,其实很简单,不过是用于在单个文章和所有文章列表之间切换罢了!
当然要注意,Navbar也得加入到合适的Router位置,让他在合适的时机显示!

import React from 'react'

import { Link } from 'react-router-dom'

export const Navbar = () => {
  return (
    <nav>
      <section>
        <h1>Redux 基础教程示例</h1>

        <div className="navContent">
          <div className="navLinks">
            <Link to="/">文章列表</Link>
          </div>
        </div>
      </section>
    </nav>
  )
}

好,经过以上操作,配合router,现在新增了一个显示特定文章全文的页面,并且,可以在全文页和列表页之间切换捏。

标签:const,posts,rtk,part3,文章,组件,import,post
From: https://www.cnblogs.com/nulixuexipython/p/17146865.html

相关文章

  • 如何做好软件测试用例的评审?这篇文章告诉你
    对于测试的各项评审中,测试用例的评审尤为重要。因为测试用例的设计决定了测试的充分性和有效性。即使测试报告的评审能够发现测试的问题,但到了那时再重新设计测试用例,......
  • php网页文章分类超链接
    在原来代码基础上更改输出导航栏的代码更改后网页导航栏预览如下,但超链接为空,所以点击导航栏没反应用数据库查询zblog内的文章 查询某个文章分类内的文章,要查询的文......
  • 公众号文章怎么携带文件?2023最新解决办法
    我们在日常生活中,经常会看到公众号发布的一些图文、音频、视频等,有的时候更是能在文章中看到并下载一些附件文件,比如:申请表、报名表、登记表等文档。公众号文章作为一......
  • 理解树状数组这一篇文章就够啦
    树状数组TODO:二维树状数组维护不可差分信息补充题目前言在阅读本文之前,您可能需要先了解位运算、二叉树以及前缀和与差分等相关知识本文中,若无特殊说明,数列下......
  • rtk 快速实践 创建一个Post part2 文章列表和添加新文章
    这一节大概能对应文档的数据流结构项目启动大家好,经过rtk快速上手和前个视频的开发环境搭建,下面我们开始真正动手实践吖。从文档的探索初始项目开始,但是稍微有区别,以......
  • rtk 快速实践 part1 创建一个Post
    开发环境搭建(Typescript+RTK模板的使用)嗨,大家好,经过rtk快速上手,下面我们开始真正动手实践吖。cra创建项目提供了Typescript配合redux的模板,这个模板就是下面两行安......
  • 公众号如何上传文件,公众号文章上传附件教程(简单实用2023最新)
    我们在日常生活中,经常会看到公众号发布的一些图文、音频、视频等,有的时候更是能在文章中看到并下载一些附件文件,比如:申请表、报名表、登记表等文档。公众号文章作为一......
  • 易基因项目文章 | 组蛋白ChIP-seq揭示烟粉虱含菌细胞共生菌调控宿主生殖的新机制
    喜报:易基因组蛋白ChIP-seq研究成果见刊《CellReports》2023年02月10日,沈阳农业大学植物保护学院博士研究生姚亚林为第一作者、栾军波教授为论文通讯作者在《CellRep......
  • mingw32编译libssh2 转载的文章
    由于实习工作中要用到基于sftp协议开发一个网络程序,同时要实现运行在Windows平台上,找来找去就这个libssh2库好用,在网络上算是有那么一点点的文档可以看。这个库还不是现成......
  • 前端:margin、padding、float一篇文章彻底理解
    系列文章目录文章目录​​系列文章目录​​​​margin——意思是边距​​​​margin的4个取值​​​​padding——意思是填充​​​​float——意思是浮动​​​​总......