热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用ReactNativePart#11构建WordPress客户端应用程序:删除书签功能

在这里,我们将实现从文章中删除书签。这种情况比保存书签更简单。在这里,我们将定义一个称为removeBookMark的函数。为此,我们需要

在这里,我们将实现从文章中删除书签。 这种情况比保存书签更简单。 在这里,我们将定义一个称为removeBookMark的函数。 为此,我们需要使用以下代码片段中的代码:

removeBookMark = async post_id => {this .setState({ already_bookmark : false });const bookmark = await AsyncStorage.getItem( 'bookmark' ).then( token => {const res = JSON .parse(token);return res.filter( e => e !== post_id);});await AsyncStorage.setItem( 'bookmark' , JSON .stringify(bookmark));};

在这里,我们已将already_bookmark的状态更改为false。 然后,我们使用AsyncStorage模块的getItem函数获得了书本 。 然后,我们解析对JSON的响应,并将其存储在res常量中。 然后使用过滤器HOC,我们从书签中删除帖子ID。 然后,再次使用setItem将剩余值保存在书签数组中。

渲染书签

在这里,我们将根据文章是否已添加书签来更改already_bookmark状态的值。 这个already_bookmark状态将处理在SinglePost屏幕中显示已添加书签或未添加书签的模板。 为此,我们需要创建一个名为renderBookMark的新函数,如下面的代码片段所示:

renderBookMark = async post_id => {await AsyncStorage.getItem( 'bookmark' ).then( token => {const res = JSON .parse(token);let data = res.find( value => value === post_id);return data == null? this .setState({ already_bookmark : false }): this .setState({ already_bookmark : true });});};

在此,该函数将发布ID作为参数。 然后,通过使用帖子ID,我们使用AsyncStorage的getItem函数获得书签ID。 获得值之后,我们对其进行解析,然后检查书签数组中是否存在文章发布ID。 如果存在,我们将already_bookmark状态设置为true,否则将其设置为false。

然后,我们需要在componentDidMount()上调用此函数,并将post id设置为我们从导航道具中获取的参数,如下面的代码片段所示:

componentDidMount() {this .fetchPost().then( () => {this .renderBookMark( this .props.navigation.getParam( 'post_id' ));});}

因此,我们将在仿真器屏幕中获得以下结果:

如我们所见,我们已经在SinglePost屏幕中成功实现了书签功能。 现在,我们可以为文章添加书签了。 但是,我们还需要在某处显示加了书签的帖子。 我们将在Bookmark.js文件的Bookmark屏幕中执行此操作。

书签索引画面

在这里,我们将实现“书签屏幕”以显示所有带有书签的文章。 我们已经在底部标签导航器中设置了“书签”屏幕的导航。 因此,我们可以在下面的仿真器屏幕中看到“书签”:

是的,我们将显示与主屏幕类似的帖子。 我们将从服务器上获取加书签的帖子,并将其显示为列表。

但是首先,我们需要定义新的状态变量,称为bookmark_postisFetchingbookmark_post将存储我们从服务器获取的加书签的帖子。 并且, isFetching状态用于显示加载程序。 它们的定义如下面的代码片段所示:

class Bookmark extends Component {constructor (props) {super (props);this .state = {bookmark_post : [],isFetching : false ,};}

然后,我们需要在Bookmark.js文件中导入AsyncStorage软件包,如下面的代码片段所示:

import AsyncStorage from '@react-native-community/async-storage' ;

然后,我们需要从服务器获取加书签的帖子。 为此,我们需要定义一个名为fetchBookMark的新函数,如下面的代码片段所示:

async fetchBookMark() {let bookmark = await AsyncStorage.getItem( 'bookmark' ).then( token => {const res = JSON .parse(token);if (res != null ) {const result = res.map( post_id => {return 'include[]=' + post_id;});return result.join( '&' );} else {return null ;}});const response = await fetch(`https://kriss.io/wp-json/wp/v2/posts? ${bookmark} `);const post = await response.json();//this.setState({ posts: post });this .setState({ bookmark_post : post });}

在这里,首先,我们从AsyncStorage获取书签数据,然后映射所有帖子ID,以在WordPress API上构建查询字符串匹配项。 然后,我们使用提取功能请求WordPress API并获得带书签的帖子的响应。 我们将响应解析为JSON,然后将其设置为bookmark_post状态变量。

接下来,我们将使用FlatList来显示文章列表,就像在主屏幕中一样。 总体实现如下代码片段所示:

componentDidMount() {this .fetchBookmark();}
render() {return ( Bookmark Post (this.props.navigation.navigate('SinglePost', {post_id: item.id,})}>Published on {moment(item.date).fromNow()})}keyExtractor={item => item.id}/>);}
}

我们需要记住,要像在主屏幕中一样进行导入。 并且,我们需要在componentDidMount挂钩中调用fetch函数。

因此,我们将在仿真器屏幕中获得以下结果:

在这里,我们在“书签”屏幕上获得了带有书签的帖子列表。 但是,当我们切换选项卡时,我们会看到componentDidMount不会触发。 这不好,因为书签可以每次更新。 如果不刷新“书签”屏幕,则书签帖子不会更新。

因此,在就此问题进行了头脑风暴之后,我们可以在S tackOverflow中获得解决方案。 建议通过更新类触发didFocusevent 。 现在,我们将按照文档中的内容进行配置。 首先,我们需要进行以下导入:

import {withNavigationFocus} from 'react-navigation' ;
class Bookmark extends Component {

在这里,我们进口withNavigationFocus反应导航 。 然后,我们需要在withNavigationFocus函数内部将导出默认值移到底部,如下面的代码片段所示:

export default withNavigationFocus(Bookmark);

并且,对于侦听器事件,我们将在componentDidMount使用它,如下面的代码片段所示:

componentDidMount() {const {navigation} = this .props;this .focusListener = navigation.addListener( 'didFocus' , () => {this .fetchBookmark();});}

因此,我们将在仿真器屏幕中获得以下结果:

如我们所见,“书签”屏幕现在每次导航到书签时都会获取书签。

摘要

在本章中,我们学习了如何删除和呈现书签。 然后,利用AsyncStorage和访方法,我们成功访了要加书签的帖子,以显示在“书签”屏幕上。 最后,我们学习了每次进入“书签”屏幕时如何重新获取带书签的帖子,以便显示新的书签。

本系列旨在展示我如何使用react-native构建一个应用程序以服务WordPress博客中的内容。 由于我的博客谈论的是本机反应,因此该系列和文章相互联系。 我们将学习如何设置许多使我们的生活舒适的程序包,并学习如何处理WordPress API。 在此,本书中讨论的最突出的功能是深色主题,脱机模式,无限滚动等。 您可以在本系列中找到更多。 本教程系列的灵感来自instamobile的React Native App模板

From: https://hackernoon.com/build-wordpress-client-app-with-react-native-11-remove-bookmark-932ul32ud



推荐阅读
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • web页面报表js下载,web报表软件 ... [详细]
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • 开发笔记:前端之前端初识
    开发笔记:前端之前端初识 ... [详细]
  • Java 中的控制流与作用域
    本文详细介绍了 Java 中的控制流语句,包括块作用域、if 语句、for 循环、while 循环、do-while 循环、switch 语句以及 break 和 continue 语句的使用方法。通过具体的代码示例,帮助读者更好地理解和应用这些控制流结构。 ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • 在项目需要国际化处理时,即支持多种语言切换的功能,通常有两种方案:单个包和多个包。本文将重点讨论单个包的实现方法。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
author-avatar
手机用户2602887787
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有