Zephyrnet Logosu

React bileşenleri ile mantığı kullanıcı arayüzünden nasıl ayırabilirim | yazan Esmat İbrahim | Kodlayıcı

Tarih:

Mantığı ve kullanıcı arabirimini ayırmak, bileşenlerin yazılmasını ve test edilmesini kolaylaştırır.
Bu makalenin temel amacı, yeni bileşenlerimizi, her bileşenin yalnızca kendi verilerini, hata işlemeyi, yüklemeyi ve diğer gerekli mantığı önemsediği bir şekilde yazdığımızdan emin olmaktır (bileşenler arasında veri paylaşımını farklı bir makalede tartışacağız). ).

Bu neden önemli?

  • Ölçeklenebilirlik: Gerçekten yüksek düzeyde ölçeklenebilir.
  • Kaldırılabilirlik: Bir bileşenin silinmesi bugünden sonra bir sorun olmamalı, kırılma değişiklikleri veya gerilemeler olmuyor.
  • Taşınabilirlik: Bileşeni herhangi bir yerde ve belki de aynı API'yi kullanan projeler arasında kullanma yeteneği.

Hands-

Şimdi koda inelim ve yeniden düzenlemeden önce ve sonra 2 örnek gösterelim.

Aşağıdaki örneği ele alalım ve bunun nasıl gerçekleşeceğini anlamaya çalışalım:

import React, { useMemo } from 'react';
import useAxios from 'axios-hooks'; const TodoList = () => { const [{ data, loading, error }] = useAxios( `/`); const todoItems = useMemo( () => (data ? data.filter((item) => item.status === 'TODO') : []), [data], ); if (loading) return <div>Loading...</div>; if (error) return <div>Error</div>; return <div>{JSON.stringify(todoItems)}</div>;
}; export default TodoList;

Yukarıda görebileceğiniz gibi, axios kullanarak uzak API yapılandırması aracılığıyla verileri isteyerek Yapılacaklar listesini uygulamanın basit bir örneğine sahibiz.

Durum = YAPILACAK öğeleri çıkarmak için yapılan basit hesaplamayı fark edebiliyor musunuz? Cevabınız evet ise, o zaman aynı sayfadayız.

Yazının başında da açıkladığımız gibi bizim görevimiz mantığı UI'den izole etmek ama yukarıdaki örnekte aynı JS dosyasında mantığımız var, görevimize ulaşmak için ne yapılması gerektiğine bakalım.

Yani, her şeyden önce, mantığı bileşenden çıkarmamız gerekiyor.

import { useMemo } from 'react';
import useAxios from 'axios-hooks'; const useTodoList = () => { const [{ data, loading, error }] = useAxios( `/`); const todoItems = useMemo( () => (data ? data.filter((item) => item.status === 'TODO') : []), [data], ); return [{ data, loading, error, todoItems }];
}; export default useTodoList;

Gördüğünüz gibi buna "useTodoList" adını verdik. Bu kanca, TodoList bileşeninin mantığını içermelidir.

Dosyada kullanıcı arayüzümüz olmadığını fark edebilirsiniz, bu özel bir kancadır.

Ancak ana bileşen olan “TodoList” nasıl görünmelidir?

import React from 'react'; import useTodoList from './useTodoList'; const TodoList = () => { const [{ data, loading, error, todoItems }] = useTodoList(); if (loading) return <div>Loading...</div>; if (error) return <div>Error</div>; return <div>{JSON.stringify(todoItems)}</div>;
}; export default TodoList;

Basit ha? İşte tam da bu nedenle, iş mantığının kullanıcı arabiriminin parçası olmadığı bileşenler oluşturmak ve bileşeniniz için bir API olarak özel kancayla ilgilenmek önemlidir.

Her bileşen bağımsız modda çalışırken bileşenler arasındaki iletişim ne olacak? Bir sonraki makalede ele alacağımız ilginç konu bu olacak.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?