Rumah > hujung hadapan web > tutorial js > eact Kesilapan Props Yang Mencederakan Prestasi Apl Anda

eact Kesilapan Props Yang Mencederakan Prestasi Apl Anda

DDD
Lepaskan: 2024-11-21 08:20:14
asal
615 orang telah melayarinya

eact Props Mistakes That Are Hurting Your App

Props dalam React mungkin terasa mudah, tetapi salah mengendalikannya boleh melambatkan apl anda untuk merangkak. Lama kelamaan, selepas mengekod dan melihat beberapa projek React, saya telah melihat sepuluh kesilapan berkaitan prop yang terus muncul. Isu ini mungkin bersembunyi dalam kod anda juga.

Namun, jangan risau—kami bersedia untuk membetulkannya bersama-sama. Mari selami dan jadikan apl React anda lebih pantas dan cekap!

1} Berhenti Melepasi Keseluruhan Objek Apabila Hanya Sifat Tertentu Diperlukan

Melalukan keseluruhan objek sebagai prop apabila komponen anda hanya memerlukan beberapa sifat membawa kepada pemaparan semula yang tidak perlu pada bila-bila masa objek itu dikemas kini—walaupun nilai yang anda gunakan kekal sama.

// Not ideal
function UserProfile({ user }) {
  // Only uses name and email
  return (
    <div>
      <h2>{user.name}</h2>
      <p>{user.email}</p>
    </div>
  );
}

// Better
function UserProfile({ name, email }) {
  return (
    <div>
      <h2>{name}</h2>
      <p>{email}</p>
    </div>
  );
}
Salin selepas log masuk
Salin selepas log masuk

Hanya lulus apa yang perlu. Dengan memastikan prop fokus dan minimum, anda akan mengurangkan kekerapan komponen dipaparkan semula, memberikan apl anda peningkatan prestasi yang ketara.

2} Elakkan Mencipta Objek Baharu dalam Props pada Setiap Render

Satu lagi punca tersembunyi ialah mencipta objek sebaris dalam prop. Apabila anda melakukan ini, anda membuat rujukan objek baharu setiap kali komponen anda dipaparkan. Rujukan baharu ini memaksa komponen anak untuk dipaparkan semula, walaupun nilainya sama.

// Not efficient
function ParentComponent() {
  return (
    <ChildComponent 
      styles={{ margin: '20px', padding: '10px' }}
      config={{ theme: 'dark', animate: true }}
    />
  );
}

// Smarter approach
const styles = { margin: '20px', padding: '10px' };
const config = { theme: 'dark', animate: true };

function ParentComponent() {
  return (
    <ChildComponent 
      styles={styles}
      config={config}
    />
  );
}
Salin selepas log masuk
Salin selepas log masuk

Ambil definisi objek di luar komponen anda atau gunakan useMemo untuk yang dibuat secara dinamik. Ia adalah tweak mudah, tetapi ia boleh mengurangkan pemaparan yang tidak perlu secara mendadak dan memastikan semuanya berjalan lancar.

3} Elakkan Penyebaran Props Tidak Perlu

Menggunakan penyebaran prop (...props) mungkin terasa mudah, tetapi selalunya ia lebih mendatangkan mudarat daripada kebaikan. Ia menurunkan prop yang anda tidak perlukan, menjadikan komponen anda lebih sukar untuk nyahpepijat, malah boleh mencetuskan pemaparan semula yang tidak diingini.

// Inefficient
function Parent() {
  const props = {
    name: 'John',
    age: 30,
    email: 'john@email.com',
    phone: '1234567890',
    address: '123 Street'
  };

  return <UserCard {...props} />;
}

// A better way
function Parent() {
  const props = {
    name: 'John',
    age: 30,
    email: 'john@email.com',
    phone: '1234567890',
    address: '123 Street'
  };

  return <UserCard name={props.name} email={props.email} />;
}
Salin selepas log masuk
Salin selepas log masuk

Dengan menyatakan hanya prop yang anda perlukan, anda menjadikan komponen anda lebih bersih dan lebih mudah diramal. Ini memastikan apl anda lebih pantas dan lebih mudah diselenggara.

4} Sentiasa Menghafal Alat Panggilan Balik

Fungsi panggil balik yang tidak diingati boleh menjejaskan prestasi secara senyap. Setiap kali komponen anda dipaparkan semula, tika fungsi baharu dibuat. Ini boleh memecahkan pengoptimuman dalam komponen anak menggunakan React.memo atau menyebabkan pemaparan semula yang tidak perlu.

// Not optimal
function TodoList() {
  const handleClick = (id) => {
    // handle click
  };

  return <TodoItem onClick={handleClick} />;
}

// Optimal approach
function TodoList() {
  const handleClick = useCallback((id) => {
    // handle click
  }, []); // Include dependencies if needed

  return <TodoItem onClick={handleClick} />;
}
Salin selepas log masuk
Salin selepas log masuk

Balut prop panggil balik dengan useCallback apabila menghantarnya ke komponen yang dihafal atau menggunakannya dalam useEffect. Ini memastikan rujukan yang stabil dan mengelakkan kemas kini yang tidak perlu.

5} Hentikan Penggerudian Prop Melalui Pelbagai Aras

Melalui prop melalui beberapa komponen yang tidak menggunakannya adalah cara yang pasti untuk membuat pemaparan semula yang tidak perlu dan kod yang tidak kemas. Ini dipanggil penggerudian prop dan ia boleh menjadikan apl anda lebih sukar untuk diurus apabila ia berkembang.

// Not ideal
function UserProfile({ user }) {
  // Only uses name and email
  return (
    <div>
      <h2>{user.name}</h2>
      <p>{user.email}</p>
    </div>
  );
}

// Better
function UserProfile({ name, email }) {
  return (
    <div>
      <h2>{name}</h2>
      <p>{email}</p>
    </div>
  );
}
Salin selepas log masuk
Salin selepas log masuk

Daripada menghantar prop ke bawah melalui setiap lapisan, gunakan alat seperti Konteks Reaksi atau perpustakaan seperti Zustand untuk mengurus data bersarang dalam. Pendekatan ini memastikan kod anda lebih bersih dan mengelakkan pemaparan yang tidak perlu.

6} Jangan Gunakan Indeks Tatasusunan sebagai Kunci

Menggunakan indeks tatasusunan sebagai kunci mungkin kelihatan tidak berbahaya, tetapi ia boleh menyebabkan pepijat dan masalah prestasi yang halus, terutamanya dalam senarai di mana item disusun semula atau dialih keluar.

// Not efficient
function ParentComponent() {
  return (
    <ChildComponent 
      styles={{ margin: '20px', padding: '10px' }}
      config={{ theme: 'dark', animate: true }}
    />
  );
}

// Smarter approach
const styles = { margin: '20px', padding: '10px' };
const config = { theme: 'dark', animate: true };

function ParentComponent() {
  return (
    <ChildComponent 
      styles={styles}
      config={config}
    />
  );
}
Salin selepas log masuk
Salin selepas log masuk

Sentiasa gunakan pengecam unik yang stabil sebagai kunci. Ini membantu React menjejaki komponen anda dengan betul, memastikan kemas kini yang lancar dan mengekalkan keadaan dengan tepat.

7} Berhenti Menyalurkan Alat Peraga yang Tidak Digunakan

Melalui prop yang tidak perlu boleh mengembang komponen anda dan mencetuskan pemaparan semula yang boleh dielakkan. Setiap prop tambahan menambah pada overhed, walaupun ia tidak digunakan dalam komponen.

// Inefficient
function Parent() {
  const props = {
    name: 'John',
    age: 30,
    email: 'john@email.com',
    phone: '1234567890',
    address: '123 Street'
  };

  return <UserCard {...props} />;
}

// A better way
function Parent() {
  const props = {
    name: 'John',
    age: 30,
    email: 'john@email.com',
    phone: '1234567890',
    address: '123 Street'
  };

  return <UserCard name={props.name} email={props.email} />;
}
Salin selepas log masuk
Salin selepas log masuk

Faktor semula komponen anda dengan kerap dan keluarkan sebarang prop yang tidak penting. Komponen yang lebih ramping bermakna kurang pemaparan semula dan apl yang lebih pantas.

8} Sentiasa Gunakan Jenis Prop yang Betul

Melangkau PropTypes atau TypeScript ialah kesilapan biasa yang boleh membawa kepada pepijat dan ralat masa jalan. Alat ini membantu menangkap isu berkaitan prop semasa pembangunan, menjadikan apl anda lebih mantap dan lebih mudah untuk nyahpepijat.

// Not optimal
function TodoList() {
  const handleClick = (id) => {
    // handle click
  };

  return <TodoItem onClick={handleClick} />;
}

// Optimal approach
function TodoList() {
  const handleClick = useCallback((id) => {
    // handle click
  }, []); // Include dependencies if needed

  return <TodoItem onClick={handleClick} />;
}
Salin selepas log masuk
Salin selepas log masuk

Menggunakan TypeScript atau PropTypes bukan sahaja membantu anda mengesan masalah lebih awal tetapi juga menjadikan komponen anda lebih mudah diramal dan diselenggara.

9} Jangan Sekali-kali Mengubah Props Secara Terus

Menukar prop secara langsung bertentangan dengan prinsip kebolehubah React, selalunya membawa kepada pepijat yang tidak dijangka dan kemas kini terlepas.

// Not ideal
function GrandParent({ user }) {
  return <Parent user={user} />;
}

function Parent({ user }) {
  return <Child user={user} />;
}

function Child({ user }) {
  return <span>{user.name}</span>;
}

// Smarter solution
function App() {
  const [user] = useState(userData);

  return (
    <UserContext.Provider value={user}>
      <GrandParent />
    </UserContext.Provider>
  );
}

function Child() {
  const user = useContext(UserContext);
  return <span>{user.name}</span>;
}
Salin selepas log masuk

Pastikan prop tidak boleh diubah dengan menggunakan fungsi atau kemas kini keadaan sebaliknya. Ini memastikan React boleh menjejaki perubahan dengan betul dan memaparkan semula komponen apabila diperlukan.

Kesimpulan

Kesilapan prop ini mungkin kelihatan kecil, tetapi ia bertindan untuk menimbulkan isu prestasi yang serius dari semasa ke semasa. Untuk memastikan apl React anda berjalan lancar:

  • Hanya lulus prop yang sebenarnya diperlukan oleh komponen.
  • Gunakan useCallback untuk menghafal fungsi dan mengelakkan pemaparan yang tidak perlu.
  • Bergantung pada alatan pengurusan negeri seperti Konteks atau Zustand dan bukannya alat penggerudi.
  • Jangan sesekali mengubah props secara langsung—sentiasa bekerja dengan kemas kini yang tidak boleh diubah.
  • Gunakan TypeScript atau PropTypes untuk menguatkuasakan keselamatan jenis dan menangkap pepijat lebih awal.

Alat untuk membantu anda mengoptimumkan:

  • Tab Prestasi DevTools React: Tentukan kesesakan prestasi.
  • mengapa-anda-menyatakan: Kesan pemaparan yang tidak diperlukan secara automatik.
  • Pemalam ESLint React Hooks: Pastikan penggunaan cangkuk yang betul.
  • Skrip Jenis: Tambahkan penaipan statik untuk kebolehpercayaan yang lebih baik.

Selesaikan isu ini hari ini dan anda akan perasan apl anda berasa lebih pantas, lebih responsif dan lebih mudah diselenggara.

Selamat mengekod!!

Atas ialah kandungan terperinci eact Kesilapan Props Yang Mencederakan Prestasi Apl Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan