reactjs - TypeError: Object(...) 不是 ReactJS 中的函数
问题描述
我正在尝试在我的 localhost 中运行此 Web 应用程序。作为 ReactJS 和 Firebase 的新手,我不知道如何调试此错误。我尝试用谷歌搜索错误,但仍然找不到解决方案。
这是我的 index.js。错误来自第 17 行。
1 import { convertLegacyDataProvider } from 'react-admin';
2 import { FirebaseAuthProvider } from 'react-admin-firebase';
3 import { FirestoreDataProvider } from 'ra-data-firestore';
4 import polyglotI18nProvider from 'ra-i18n-polyglot';
5 import { app, firebaseConfig, db } from '@/vars/firebase';
6 import { USERS } from '@/vars/resources';
7 import messages from '@/vars/i18n';
8 import usersDataProvider from './usersDataProvider';
9
10 const debug = true;
11 const log = (...args) => {
12 if (process.env.NODE_ENV === 'development' && debug) console.log(...args);
13 };
14
15 export const authProvider = FirebaseAuthProvider(firebaseConfig, { app });
16
17 const firestoreDataProvider = FirestoreDataProvider(firebaseConfig, {
18 redundantUpdate: {
19 products: {
20 query: id => db.collectionGroup('slots').where('product.id', '==', id),
21 source: ['name', 'description', 'priceCash', 'image.src'],
22 target: 'product',
23 },
24 },
25 });
26
27 const _usersDataProvider = convertLegacyDataProvider(usersDataProvider);
28
29 export const dataProvider = new Proxy(firestoreDataProvider, {
30 get(target, name) {
31 return (resource, params) => {
32 log(name + ': ', { resource, params });
33 if (resource === USERS && ['getOne', 'create', 'update', 'delete', 'deleteMany'].includes(name)) {
34 return _usersDataProvider[name](resource, params);
35 }
36
37 return target[name](resource, params);
38 };
39 },
40 });
41
42 export const i18nProvider = polyglotI18nProvider(() => messages, 'en', {
43 allowMissing: true,
44 onMissingKey: key => key,
45 });
编辑:这是我的 usersDataProvider.js
1 import { CREATE, DELETE, DELETE_MANY, GET_ONE, UPDATE } from 'react-admin';
2 import { functions, db } from '@/vars/firebase';
3
4 const usersDataProvider = async (type, resource, params) => {
5 switch (type) {
6 case GET_ONE: {
7 const { id } = params;
8 const userSnapshot = await db
9 .collection('users')
10 .doc(id)
11 .get();
12
13 if (userSnapshot.exists) {
14 let data = userSnapshot.data();
15
16 const { client } = data;
17 if (client) {
18 const clientSnapshot = await db
19 .collection('clients')
20 .doc(client.id)
21 .get();
22
23 if (clientSnapshot.exists) {
24 data = {
25 ...data,
26 client: {
27 ...client,
28 ...clientSnapshot.data(),
29 },
30 };
31 }
32 }
33
34 return { data: { id, ...data } };
35 } else {
36 throw new Error('Id not found');
37 }
38 }
39
40 case CREATE: {
41 const data = await functions.httpsCallable('auth-createUser')(params.data);
42 return data;
43 }
44
45 case UPDATE: {
46 const { id } = params;
47 const data = await functions.httpsCallable('auth-updateUser')({ id, ...params.data });
48 return data;
49 }
50
51 case DELETE: {
52 const { id } = params;
53 await functions.httpsCallable('auth-deleteUser')({ id });
54 return { data: id };
55 }
56
57 case DELETE_MANY: {
58 const { ids } = params;
59 await ids.map(id => functions.httpsCallable('auth-deleteUser')({ id }));
60 return { data: ids };
61 }
62
63 default:
64 throw Error(`Unhandled method: ${resource} ${type}`);
65 }
66 };
67
68 export default usersDataProvider;
index.js 和 usersDataProvider.js 都在 ../src/providers/ 文件夹中。
解决方案
尝试像这样导入 usersDataProvider - { usersDataProvider }
推荐阅读
- geocoding - 这里 api 批量地理编码仍然被接受
- sql - 如何在 SQL Server 中根据身份创建要插入的值?
- java - Spring Boot 中的 PersistenceContext 生命周期
- oracle - Oracle 12c Sysdate 与文本框日期时间的比较
- java - 是否可以使用 MS Java EWS 搜索服务器上的所有邮箱?
- node.js - MVC rest api中的格式化逻辑放在哪里
- regex - How to match regular expression but return the remaining part of the input in Rust Nom?
- css - 如何选择 web 组件的 shadow-dom ::part() 的 :first-child
- axios - Next.js:后端服务器路径在 next.config.js rewrites() 中定义,但返回 404 错误
- python - 如何在Python中查找特定文件是否存在于某处