首页
学习
活动
专区
圈层
工具
发布

如何优雅的在react-hook中进行网络请求

本文将介绍如何在使用React Hook进行网络请求及注意事项。...前言 Hook是在React 16.8.0版本中新加入的特性,同时在React-Native的0.59.0版本及以上进行了支持,使用hook可以不用class的方式的方式使用state,及类似的生命周期特性...这里我们在函数中调用了setData设置接口返回数据,触发页面的更新机制,就造成了死循环。...其实我们只是需要再页面加载后执行一次即可,也就是在class写法中componentDidMount()进行数据请求。 useEffect提供了第二参数,用于解决此类问题。...,依赖项中数据发生变化的时候,hook就会重新执行,如果依赖项为空,hook认为没有数据发生变更,在组件更新的时候就不会在此执行。

10.6K73
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RN项目第二节 -- 首页实现

    this.requestDiscount() //调用推荐方法 this.requestRecommend() } 实现折扣模块的方法 这里使用...也就是说当执行到awiat的时候,执行器将交给其他线程,等执行权返回再从暂停的地方往后执行。 这里做的是请求数据的操作,用fetch函数传入api得到全部的折扣数据结果。...async requestDiscount() { try { let response = await fetch(api.discount)...在代码中用fetch将数据解析成json格式,取出data集合中的数据传入箭头函数中,一一赋值给指定变量之后返回给数组dataList。如此一来,就可以用setState方法改变数组的数据。...方法中 componentDidMount() { this.requestData() } 处理列表 在iOS或者其他编程语言中,会采用各类框架来防止代码冗余。

    7.4K30

    在 React 应用中获取数据

    在教程结束后,你会清楚的知道 React 中该如何获取数据,不同方法的利弊和如何在 React 应用中使用这些技术。...这篇教程的重点不是它,它可以提供远程 API 用来演示如何在 React 中获取数据。...数据更新频率 在 componentDidMount() 方法中初始化数据是很合理的,但是,我需要经常更新数据。基于 REST API,只有通过轮询的方式解决。...我们的应用中只是在 componentDidMount() 方法中启动一个 5s 的定时器更新数据,然后,在 componentWillUnmount() 方法清除定时器 componentDidMount...在你的应用中,你可以执行一些重试逻辑、提示用户或者显示一些预设的内容。 Fetch API vs. Axios Fetch API 是有缺陷的。处理响应的时候必须额外的经过 JSON 处理。

    12.4K20

    干货 | 携程度假无线前端架构演进之路

    如上图所示,很简单,Controller 包含了很多生命周期,其中 getInitialState 会在创建 Model/Store 实例之前调用,支持异步,可以使用 Controller 提供的 fetch...虽然我们可以抽取成 custom hooks,使之可以复用到 React-Native,但当我们在 useEffect 里使用 DOM/BOM 或 RN 特有 API 去触发 setState 时,它们又跟特定平台耦合...Model 是单独定义的,通过暴露的 React-Hooks API,在 React-DOM 组件里使用,同时它也可以在 React-Native 组件中使用。...在不同平台,我们可以注入不同的 setupFetch 等实现,比如在浏览器里,我们注入 window.fetch 的封装,在 Node.js 里我们注入 node-fetch 的封装,在 React-Native...也就是说,我们会有多个项目,分别是不同的脚手架搭建的,只是共用了通过一个 Model 层的代码。那么,如何在多个项目里共享代码,就成了一个需要解决的工程问题。

    2.8K30

    【Hybrid开发高级系列】ReactNative(三)——RN能力简介

    使用对应的React component,就可以轻松地把这些原生组件整合到你的ReactNative应用中, 例如TabBarIOS和DrawerLayoutAndroid。...        在Javascript代码和原生平台之间的所有操作都是异步执行的,并且原生模块还可以根据需要创建新的线程。...同时还提供了高度封装的组件如TouchableHighlight等,可以直接嵌入到ScrollView或者其它的元素中,无需额外配置。...除此之外,我们还吸纳了web生态系统中的通用标准,并在必要的时候为这些API提供兼容层。如此一来,npm上的许多库就可以在React Native中直接使用。...我们还在努力增加更多的API,并且十分欢迎开源社区进行贡献。

    90930

    React的移动端和PC端生态圈的使用汇总

    个人建议,在Node.js开发和React native以及大型React中使用TypeScript 在下载官方的react脚手架中,包含了一个第三方的ts创建脚手架的命令 在 Create React...在react-native中使用Ant-Design yarn add @ant-design/react-native 在babel配置中: "plugins": [ ["import",...API(如打开文件窗口、通知、图标等) 基于 Electron的开发就像在开发网页,而且能够无缝地 使用 Node。...基于JavaScriptCore,Web开发者可以尽情使用ES6的新特性,如class、箭头操作符等,而且 React Native运行在JavaScriptCore中的,完全不存在浏览器兼容的情况。...参考文章,react-native原理解析,看在react-native跨平台开发的无缝对接js和react份上,我决定坚定使用它。希望在1.0版本到来的时候,给我们一个惊喜。

    2.8K40

    React的移动端和PC端生态圈的使用汇总

    开发和React native以及大型React中使用TypeScript 在下载官方的react脚手架中,包含了一个第三方的ts创建脚手架的命令 在 Create React App 中使用 TypeScript...中使用Ant-Design yarn add @ant-design/react-native 在babel配置中: "plugins": [ ["import", { libraryName: "@...API(如打开文件窗口、通知、图标等) 基于 Electron的开发就像在开发网页,而且能够无缝地 使用 Node。...基于JavaScriptCore,Web开发者可以尽情使用ES6的新特性,如class、箭头操作符等,而且 React Native运行在JavaScriptCore中的,完全不存在浏览器兼容的情况。...流程如下图: 参考文章,react-native原理解析,看在react-native跨平台开发的无缝对接js和react份上,我决定坚定使用它。希望在1.0版本到来的时候,给我们一个惊喜。

    2.8K10

    5. ListView应用

    return { type: RECEIVE_MOVIES, isFetching: false, movies: ret } } 可以看出只是在调用异步...fetch里dispatch我们真正要处理的函数,这样就可以延迟函数做到异步,这里尤其要注意fetchMovies函数是同步的,如果要异步执行,把fetch返回即可,这里没有是以为没有必要,什么时候返回异步取决于你的业务以及你的...== r2}); this.state = { dataSource: ds }; } componentDidMount() { const {dispatch...action要使用dispatch const {isFetching, movies} = this.props;这个虽然在代码里没有显示声明,这是redux帮我们注入的 ListView的dataSource...,取决于你的state结构的设计,比如这里的dataSource由于是在组件内部使用,就没必要暴露给外界了 点击某个电影条目跳转到详情,为了简便起见,这里直接新建了一个detail.js内部使用WebView

    77450

    React fetch发送请求

    在React中,可以使用内置的fetch函数发送HTTP请求。fetch函数提供了一种现代的、基于Promise的方式来处理异步数据请求。...处理响应:通过对响应对象调用相应的方法(如json()、text()、blob()等)来解析响应数据。处理错误:使用Promise的catch方法捕获请求过程中发生的错误,并进行错误处理。...现在,让我们通过一个示例来演示在React中使用fetch发送请求的过程。...; }}在上面的示例中,我们在组件的componentDidMount生命周期方法中使用fetch发送了一个GET请求到https://api.example.com/data。...如果成功,我们调用json()方法来解析响应数据,并在解析完成后处理数据。如果请求失败,我们抛出一个错误,然后在.catch块中捕获并处理。

    1.5K20

    react native入门实战(一)

    ShortVideoList react-native run-ios 运行与调试 在iOS Emulator中按下command+R就可以刷新APP,看到最新内容 在iOS Emulator中按下...command+D就可以弹出以下窗口,在浏览器窗口上打开链接localhost:8081/debugger-ui就可以进行debug调试 使用react-native写一个简单的页面 使用react...模块下的identity模块中的Bundle identifier设置为com.tencent.a(a可以换成其他字符串哈),并且进行如下如所示配置 在XCode中选中自己的IOS设备作为目标,然后点击...在react native中,我们使用measureLayout来判断窗体的具体位置。...在react native中,我们也可以使用istView视图列表组件中的相关函数onChangeVisibleRows来辅助进行处理; 数据缓存, 使用react native AsyncStorage

    8.7K70
    领券