当页面加载时,我使用Redux工具包(原生react )和useGetGenreMoviesQuery钩子来获取电影.

const { data, isLoading, error } = useGetGenreMoviesQuery(page);

现在,我想在按下按钮时触发相同的API调用.然而,当我试图为按下按钮而拆卸useGetGenreMoviesQuery钩时:

const [getMovies, { data, isLoading, error }] = useGetGenreMoviesQuery(page);

我得到了错误:

‘TypeError:解析不可迭代实例的try 无效.要成为可迭代对象,非数组对象必须具有Symbol.iterator方法.’

在这种情况下,如何通过按下按钮来正确地进行API调用?

我try 删除const数组,并try 使用redux工具包中的refetch调用相同的API.

const { data, isLoading, error, refetch } = useGetGenreMoviesQuery(page);

但这并不奏效.

我必须在用户交互上再次进行API调用

推荐答案

我相信refetch函数should在这种情况下可以工作,但是作为某些UI事件的结果或在回调中实现查询调用的更传统的方法是使用Lazy Query.惰性查询挂钩102返回包含触发器函数和结果的array.

从API切片中导出生成的useLazyGetGenreMoviesQuery钩子,并在按钮的onClick回调处理程序中调用触发器函数.

...

const [
  getMovies,
  { data, isLoading, error }
] = useLazyGetGenreMoviesQuery();

...

const clickHandler = async (page) => {
  try {
    const result = await getMovies(page).unwrap();
    // success, any additional logic
  } catch(error) {
    // failure
  }
}

...

<button type="button" onClick={clickHandler}>
  Get Movies
</button>

...

React-native相关问答推荐

Appcenter codepush 返回请求被阻止

React Native - 动画宽度缩小

在 React 中使用 Lodash debounce 来防止在用户输入时请求数据

React Navigation 5 隐藏Drawer抽屉元素

Visual Studio 2017 中的 React Native

如何判断 React Native 中的 AsyncStorage 中是否存在密钥? getItem() 总是返回一个promise对象

React Native Remote Debugger 在 Chrome 中显示缓存的包

如何从 React Native 应用程序打开 Google Play store ?

在本react-native中具有异步和等待的箭头函数

在 react-native 和 firebase 3.1 中登录 Facebook

React Native 中使用了哪些维度单位?

如何修复 npm start cannot determine native SDK version错误?

在 react-native 中设置动态 'initialRouteName'

如何将props传递给 React Navigation 导航器中的组件?

React Native Build Error on IOS - typedef 用不同类型重新定义('uint8_t'(又名'unsigned char')与'enum clockid_t')

React Native:如何将文件拆分为多个文件并导入它们?

在 React-native 上加载图像时出错:Unexpected character

com.facebook.react.bridge.readablenativemap 不能转换为 java.lang.string

如何在 react-native 中重叠

如何在 React Native 中更改 textInput 占位符的字体系列