Dalam artikel sebelumnya, Mempermudahkan Permintaan HTTP dalam React dengan Custom Hooks ?, kami meneroka cara untuk memudahkan permintaan HTTP menggunakan kait tersuai. Walaupun berkesan untuk aplikasi yang lebih kecil, pendekatan ini mungkin menjadi lebih sukar untuk dikekalkan apabila apl React anda berskala. Dalam artikel ini, kita akan menyelami cara mengendalikan operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam cara berskala menggunakan Axios dan React Query.
Mengapa Axios dan React Query?
Axios: Pelanggan HTTP berasaskan janji untuk penyemak imbas dan Node.js, Axios memudahkan penghantaran permintaan HTTP tak segerak ke titik akhir REST dengan kod yang bersih dan boleh dibaca.
React Query: Pustaka pengambilan data yang berkuasa yang mempertingkatkan penyegerakan data, caching dan pengurusan keadaan dalam React. React Query mengautomasikan pengambilan data sambil menyediakan kawalan yang lebih baik ke atas keadaan pemuatan dan ralat.
Menyediakan Axios dan React Query
Mula-mula, pasang pakej yang diperlukan:
npm install axios react-query react-router-dom
Menyediakan Pertanyaan Reaksi dalam Apl Anda
Seterusnya, konfigurasikan React Query dalam fail masukan anda (App.tsx) untuk mengurus tetapan pertanyaan global aplikasi anda.
// src/App.tsx import { QueryClient, QueryClientProvider } from 'react-query'; import { CustomRouter } from './Router'; const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, // Prevent refetch on tab/window switch retry: 1, // Retry failed queries once }, }, }); const App: React.FC = () => ( <queryclientprovider client="{queryClient}"> <customrouter></customrouter> </queryclientprovider> ); export default App;
Menyediakan Axios dengan Pemintas
Untuk mengendalikan pengesahan secara global, kami boleh mencipta tika Axios dan menggunakan pemintas untuk melampirkan pengepala Kebenaran untuk permintaan yang disahkan.
// src/config/axiosApi.ts import axios from 'axios'; const authenticatedApi = axios.create({ baseURL: import.meta.env.VITE_BASE_URL, // Environment-specific base URL headers: { 'Content-Type': 'application/json', }, }); // Attach Authorization token to requests if present authenticatedApi.interceptors.request.use((config) => { const token = localStorage.getItem('crud-app-auth-token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }); export { authenticatedApi };
Mencipta Fungsi API untuk Operasi CRUD
Mari tentukan fungsi yang berinteraksi dengan API kami untuk melaksanakan operasi CRUD menggunakan Axios:
// src/data/api/post.ts import { authenticatedApi } from '../../config/axiosApi'; // Error handler function to standardize error messages export const handleApiError = (error: any): never => { if (error.message === 'Network Error') { throw new Error('Network Error. Please try again later.'); } else if (error.response?.data?.error) { throw new Error(error.response.data.error); } else if (error.response) { throw new Error('A server error occurred.'); } else { throw new Error(error.message || 'An unknown error occurred.'); } }; // General function to handle API requests export const apiCall = async <t>( method: 'get' | 'post' | 'put' | 'delete', url: string, data?: any, ): Promise<t> => { try { const response = await authenticatedApi[method](url, data); return response.data; } catch (error) { throw handleApiError(error); } }; // CRUD functions for the post feed export const createPostApi = (post: any) => apiCall<any>('post', 'posts', post); export const getPostsApi = () => apiCall<any>('get', 'posts'); export const updatePostApi = (id: string, post: any) => apiCall<any>('put', `posts/${id}`, post); export const deletePostApi = (id: string) => apiCall<any>('delete', `posts/${id}`); </any></any></any></any></t></t>
Menggunakan Cangkuk Pertanyaan React untuk Operasi CRUD
Sekarang kami mempunyai fungsi API, kami boleh menggunakan React Query untuk mengendalikan pengurusan keadaan dan pengambilan data untuk operasi ini.
// src/data/hooks/post.ts import { useMutation, useQuery, useQueryClient } from 'react-query'; import { createPostApi, getPostsApi, updatePostApi, deletePostApi } from '../api/post'; // Custom hooks for CRUD operations export const useCreatePostApi = () => { const queryClient = useQueryClient(); return useMutation(createPostApi, { onSuccess: () => queryClient.invalidateQueries(['posts']), // Refetch posts after a new post is created }); }; export const useGetPostsApi = () => useQuery(['posts'], getPostsApi); export const useUpdatePostApi = () => { const queryClient = useQueryClient(); return useMutation(updatePostApi, { onSuccess: () => queryClient.invalidateQueries(['posts']), // Refetch posts after an update }); }; export const useDeletePostApi = () => { const queryClient = useQueryClient(); return useMutation(deletePostApi, { onSuccess: () => queryClient.invalidateQueries(['posts']), // Refetch posts after deletion }); };
Memakan Cangkuk CRUD dalam Komponen
Akhir sekali, kami boleh membina komponen mudah yang menggunakan cangkuk tersuai dan membolehkan pengguna membuat, mengedit dan memadamkan siaran.
// src/components/PostCard.tsx import React, { useState } from 'react'; import { useGetPostsApi, useDeletePostApi, useUpdatePostApi, useCreatePostApi } from '../data/hooks/post'; import { toast } from '../components/Toast'; // Assume a toast component exists const PostCard: React.FC = () => { const { data: posts, isLoading, error } = useGetPostsApi(); const deletePost = useDeletePostApi(); const updatePost = useUpdatePostApi(); const createPost = useCreatePostApi(); const [newPost, setNewPost] = useState({ title: '', content: '' }); const handleCreate = async () => { try { await createPost.mutateAsync(newPost); setNewPost({ title: '', content: '' }); toast.success('Post created successfully'); } catch (error) { toast.error(error.message); } }; const handleDelete = async (id: string) => { try { await deletePost.mutateAsync(id); toast.success('Post deleted successfully'); } catch (error) { toast.error(error.message); } }; const handleEdit = async (id: string, updatedPost: any) => { try { await updatePost.mutateAsync({ id, ...updatedPost }); toast.success('Post updated successfully'); } catch (error) { toast.error(error.message); } }; if (isLoading) return <div>Loading...</div>; if (error) return <div>Error: {error.message}</div>; return ( <div> <div> <input type="text" value="{newPost.title}" onchange="{(e)"> setNewPost({ ...newPost, title: e.target.value })} placeholder="Title" /> <input type="text" value="{newPost.content}" onchange="{(e)"> setNewPost({ ...newPost, content: e.target.value })} placeholder="Content" /> <button onclick="{handleCreate}" disabled> {createPost.isLoading ? 'Creating...' : 'Create Post'} </button> </div> {posts?.map((post: any) => ( <div key="{post.id}"> <h3 id="post-title">{post.title}</h3> <p>{post.content}</p> <button onclick="{()"> handleEdit(post.id, { title: 'Updated Title', content: 'Updated Content' })}> Edit </button> <button onclick="{()"> handleDelete(post.id)}> Delete </button> </div> ))} </div> ); }; export default PostCard;
Kesimpulan
Dengan menggunakan Axios dan React Query, anda boleh menyelaraskan operasi CRUD dalam aplikasi React anda. Gabungan ini menghasilkan kod yang bersih, boleh diselenggara, meningkatkan kebolehskalaan dan prestasi. Gunakan alatan ini untuk memudahkan pengurusan negeri dan pengambilan data semasa apl anda berkembang.
Untuk mendapatkan lebih banyak cerapan tentang React, TypeScript dan amalan pembangunan web moden, ikuti saya di Dev.to! ?
Atas ialah kandungan terperinci React Operasi CRUD dengan Axios dan React Query. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Dreamweaver Mac版
Alat pembangunan web visual
