memo
yordamida React komponentni faqat uning props
lari o'zgarganida qayta render qilinishini ta'minlash mumkin.
Bu, ishlash samaradorligini oshirishi mumkin.
Ushbu bo'lim React Hooks-dan foydalanadi. Hooks haqida qo'shimcha ma'lumot uchun React Hooks bo'limiga qarang.
Bu misolda, Todos
komponenti todos
o'zgarmaganida ham qayta render qilinadi.
Misol:
index.js:
import { useState } from 'react';
import ReactDOM from 'react-dom/client';
import Todos from './Todos';
const App = () => {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState(['todo 1', 'todo 2']);
const increment = () => {
setCount((c) => c + 1);
};
return (
<>
<Todos todos={todos} />
<hr />
<div>
Count: {count}
<button onClick={increment}>+</button>
</div>
</>
);
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Todos.js:
const Todos = ({ todos }) => {
console.log('child render');
return (
<>
<h2>My Todos</h2>
{todos.map((todo, index) => {
return <p key={index}>{todo}</p>;
})}
</>
);
};
export default Todos;
+
tugmasini bosganingizda, Todos
komponenti qayta render qilinadi.
Agar bu komponent murakkab bo'lsa, bu ishlash samaradorligini pasaytirishi mumkin.
Buni tuzatish uchun memo
dan foydalanishimiz mumkin.
memo
yordamida Todos
komponentining ortiqcha qayta render qilinishini oldini olamiz.
Todos
komponentini memo
bilan o'rab oling:
Misol:
index.js:
import { useState } from 'react';
import ReactDOM from 'react-dom/client';
import Todos from './Todos';
const App = () => {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState(['todo 1', 'todo 2']);
const increment = () => {
setCount((c) => c + 1);
};
return (
<>
<Todos todos={todos} />
<hr />
<div>
Count: {count}
<button onClick={increment}>+</button>
</div>
</>
);
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Todos.js:
import { memo } from 'react';
const Todos = ({ todos }) => {
console.log('child render');
return (
<>
<h2>My Todos</h2>
{todos.map((todo, index) => {
return <p key={index}>{todo}</p>;
})}
</>
);
};
export default memo(Todos);
Endi Todos
komponenti faqat props
orqali uzatilgan todos
yangilanganida qayta render qilinadi.