reactjs - React Native - 在功能组件中创建方法并在组件外部调用此方法,可能吗?

标签 reactjs react-native axios react-functional-component

我有一个自定义模态组件:

export default ModalLoader = props=>{
  const {
    loading,
    ...attributes
  } = props;

  function closeModal(){
    console.log('Close Modal Kepanggil coyyy!!!!!!!')
  }

  return(
    <Modal
      transparent={true}
      animationType={'none'}
      visible={loading}
    >
      <View>
        <View>
          <ActivityIndicator
            size={'large'}
            color={colors.darkRed}
          />
          <CustomText style={{fontSize:24}}>Mohon Tunggu...</CustomText>
        </View>
      </View>
    </Modal>
  )
}

我想在axios实例中使用closeModal(),所以每次axios得到响应时,我想关闭axios文件中的模态本身并不在我的所有组件中,

假设我的 axios 实例是这样的:

AxiosHttp.interceptors.response.use((res)=>{
  CustomLog(res.data, 'Interceptor')
  // call closeModal of ModalLoader
  ModalLoader.closeModal()
  return res.data;
},(err)=>{
  CustomLog(err, 'Interceptor Error')
  // call closeModal of ModalLoader
  ModalLoader.closeModal()
  return Promise.reject(err)
})

export default AxiosHttp

可以这样做吗?

最佳答案

一种方法是使用React Context .

使用您想要用来关闭/切换模式的函数创建一个上下文提供程序。然后在 ModalLoader(或任何选择的组件)中使用该上下文中的函数。

./ModalContext.jsx

import React, { createContext } from 'react';

const ModalContext = createContext({
  closeModal: () => {
    console.log('Close Modal Kepanggil coyyy!!!!!!!');
  },
});

export default ModalContext;

随着v16.8.0中引入react-hooks,您可以使用 useContext hook 在功能组件中使用上下文.

axios实例

import React, { useContext } from 'react';
import { ModalContext } from './ModalContext';

const modalContext = useContext(ModalContext);

AxiosHttp.interceptors.response.use((res)=>{
  CustomLog(res.data, 'Interceptor')
  // call closeModal in context
  modalContext.closeModal()
  return res.data;
},(err)=>{
  CustomLog(err, 'Interceptor Error')
  // call closeModal in context
  modalContext.closeModal()
  return Promise.reject(err)
})

export default AxiosHttp;

请参阅此处的工作示例:https://codepen.io/studiospindle/pen/xxxMRow

在该示例中,有一个异步函数作为示例,它将在三秒后关闭模式窗口。这是模仿 axios 的例子。还提供了一个带有按钮的示例。

关于reactjs - React Native - 在功能组件中创建方法并在组件外部调用此方法,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926995/

相关文章:

node.js - 如何使用 MongoDB + NodeJS Express 向 ReactJS React Router 和 Redux 添加登录身份验证和 session ?

javascript - 如何在 React Native 中将两个按钮放在同一行中?

reactjs - 如何在 typescript 中正确使用 Formik 的 useField 钩子(Hook)

javascript - 如何监听 "ref"对象变化?

javascript - React Native 异步 Jest 组件测试

javascript - Vue表单未提交

laravel - Laravel、barryvdh/laravel-cors 和 axios 对 404 响应的跨源请求阻止错误

react-native - React Native - 是否有可用的可靠地理围栏包?

reactjs - 如何在 React native 中连接数组内的字符串响应?

typescript - axios查询参数?