Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

4.460/20.347 câuCòn 15.887
ABy using npm or yarn to install the package.
BBy downloading the React-Bootstrap files from a website.
CBy copying and pasting the React-Bootstrap code into your project.
DBy using a CDN link to include React-Bootstrap in your HTML file.
Lời giải
Đáp án đúng: "By using npm or yarn to install the package.". React-Bootstrap được phát hành dưới dạng gói trên npm, nên cách chuẩn là chạy lệnh cài react-bootstrap cùng bootstrap bằng npm hoặc yarn, sau đó import tệp CSS của Bootstrap và import từng component như Button, Container ở nơi cần dùng; trình quản lý gói ghi phiên bản vào package.json và tự lo các gói phụ thuộc. "By downloading the React-Bootstrap files from a website." sai vì tải tay không quản lý được phiên bản, khó cập nhật và không tích hợp với công cụ build. "By copying and pasting the React-Bootstrap code into your project." sai vì chép mã thư viện vào dự án biến nó thành mã tự duy trì, mất đường nâng cấp và dễ thiếu phụ thuộc. "By using a CDN link to include React-Bootstrap in your HTML file." sai vì nhúng qua CDN chỉ hợp với trang thử nghiệm không dùng bundler; trong một dự án ReactJS dựng bằng npm, đó không phải cách cài thư viện vào dự án.
Mở trang câu hỏi này →
AYou must always wrap JSX in a single root element
BYou can use multiple root elements without any wrapping
CJSX tags can be self-closing only for non-void elements
DJSX does not support attributes like className
Lời giải

Đáp án đúng: "You must always wrap JSX in a single root element". Mỗi biểu thức JSX được biên dịch thành một lời gọi hàm tạo phần tử, mà một hàm hay câu return chỉ trả về được một giá trị, nên các phần tử cùng cấp phải nằm trong một phần tử gốc; khi không muốn thêm thẻ div thừa vào DOM thì dùng Fragment, viết gọn là <> và </>. "You can use multiple root elements without any wrapping" sai vì đó chính là điều JSX không cho phép, trả về hai thẻ liền nhau mà không bọc sẽ báo lỗi biên dịch. "JSX tags can be self-closing only for non-void elements" sai vì trong JSX mọi thẻ đều có thể tự đóng, và các thẻ rỗng (void element) như img, br, input còn bắt buộc phải tự đóng, ví dụ <img />. "JSX does not support attributes like className" sai vì className chính là thuộc tính JSX dùng thay cho class của HTML, do class là từ khoá dành riêng trong JavaScript.

Mở trang câu hỏi này →
Amap()
BforEach()
Creduce()
Dfilter()
Lời giải
Đáp án đúng: "map()". Cần nói thẳng: cả bốn phương thức map(), forEach(), reduce() và filter() đều có từ ES5 chứ không phải tính năng mới của ES6, nên việc gắn câu hỏi với ES6 là không chính xác; ES6 chỉ làm chúng gọn hơn khi đi cùng arrow function. Trong bối cảnh React, map() là phương thức tiêu biểu nhất để biến đổi mảng: nó gọi hàm cho từng phần tử và trả về một mảng MỚI cùng độ dài, ví dụ biến mảng dữ liệu thành mảng phần tử JSX khi render danh sách, nên đây là đáp án được chọn; tuy vậy có tài liệu ôn tập lại chấm reduce() vì nó là phương thức tổng quát nhất. "reduce()" gộp cả mảng về một giá trị duy nhất (tổng, đối tượng, mảng khác), mạnh nhưng không phải cách biến đổi mảng thông dụng nhất. "forEach()" chỉ duyệt để tạo side effect và luôn trả về undefined, không sinh mảng mới. "filter()" chỉ giữ lại phần tử thỏa điều kiện, không biến đổi giá trị từng phần tử.
Mở trang câu hỏi này →
ABy using the if statement
BBy using the for loop
CBy using the ternary operator {condition ? trueContent : falseContent}
DBy using the switch statement
Lời giải
Đáp án đúng: "By using the ternary operator {condition ? trueContent : falseContent}". Bên trong JSX, cặp ngoặc nhọn chỉ nhận biểu thức JavaScript (expression), tức thứ trả về một giá trị, chứ không nhận câu lệnh (statement). Toán tử ba ngôi là biểu thức nên đặt thẳng trong JSX được: điều kiện đúng thì trả về nhánh thứ nhất, sai thì trả về nhánh thứ hai; tương tự có thể dùng toán tử && khi chỉ cần một nhánh. "By using the if statement" sai vì if là câu lệnh, không viết được giữa JSX; nó chỉ dùng ở phần thân hàm phía trên return để chọn JSX nào trả về. "By using the for loop" là câu lệnh lặp, không dùng để chọn hiển thị theo điều kiện và cũng không đặt được trong JSX; muốn lặp danh sách thì dùng map. "By using the switch statement" cũng là câu lệnh nên không đặt trực tiếp trong JSX, chỉ dùng bên ngoài return hoặc tách thành hàm riêng.
Mở trang câu hỏi này →
AComponent-Based
BVirtual DOM
CLarge Community
DServer-Side Rendering
Lời giải
Đáp án đúng: "Server-Side Rendering". Câu hỏi tìm thứ không phải tính năng của React, và cần nói thẳng chỗ tranh cãi: React có hỗ trợ render phía máy chủ qua react-dom/server (renderToString, renderToPipeableStream) và qua framework như Next.js, nhưng đó là khả năng dựng thêm, cần máy chủ Node và cấu hình riêng, không phải tính năng cốt lõi mặc định của thư viện như component hay Virtual DOM; vì vậy đây là phương án được chọn. "Component-Based" là tính năng nền tảng: giao diện được chia thành component tái sử dụng. "Virtual DOM" cũng là cốt lõi: React dựng cây ảo trong bộ nhớ, so sánh (diffing) rồi chỉ cập nhật phần DOM thật thay đổi. "Large Community" đúng ra là ưu điểm của hệ sinh thái chứ không phải tính năng kỹ thuật, nên dễ bị chọn nhầm; nhưng nó thường được kể như một đặc điểm nổi bật của React, nên không phải đáp án.
Mở trang câu hỏi này →
AIt is mainly designed for handling backend logic and database management
BReact helps build interactive user interfaces, especially for SPAs.
CReact primarily functions as a server-side rendering engine for web applications.
DIt is mainly a mobile development framework and not suitable for web applications.
Lời giải
Đáp án đúng: "React helps build interactive user interfaces, especially for SPAs.". React là thư viện JavaScript để xây dựng giao diện người dùng từ các component, mỗi component mô tả giao diện theo state và React tự cập nhật DOM khi state đổi; mô hình này rất hợp với ứng dụng một trang (single-page application, SPA), nơi trang không tải lại mà giao diện thay đổi liên tục theo thao tác người dùng. Phương án "It is mainly designed for handling backend logic and database management" sai vì React chạy ở tầng giao diện, còn logic máy chủ và cơ sở dữ liệu thuộc backend như Node.js với Express. Phương án "React primarily functions as a server-side rendering engine for web applications." nhầm khả năng phụ với vai trò chính: React có thể render phía máy chủ qua framework như Next.js, nhưng mục đích chính vẫn là dựng giao diện tương tác. Phương án "It is mainly a mobile development framework and not suitable for web applications." đảo ngược sự thật: React ra đời cho web, còn mobile là React Native, một dự án riêng.
Mở trang câu hỏi này →
AIt defines the project's dependencies and scripts
BIt contains the source code of the project
CIt configures the Node.js environment
DIt manages the project's build process
Lời giải
Đáp án đúng: "It defines the project's dependencies and scripts". Tệp package.json là bản kê khai của dự án Node.js: nó ghi tên, phiên bản, danh sách gói phụ thuộc trong dependencies và devDependencies để npm hay yarn biết cần cài gì, cùng mục scripts định nghĩa các lệnh như start, dev, build, test chạy bằng npm run. "It contains the source code of the project" sai vì mã nguồn nằm trong các tệp JavaScript như thư mục src, package.json chỉ là tệp cấu hình dạng JSON. "It configures the Node.js environment" sai vì môi trường chạy như biến môi trường hay phiên bản Node được đặt qua tệp .env, nvm hoặc hệ thống; trường engines chỉ khai báo phiên bản mong muốn chứ không cấu hình môi trường. "It manages the project's build process" sai vì package.json chỉ khai báo lệnh build trong scripts; việc đóng gói và biên dịch thực sự do công cụ như Vite hoặc webpack đảm nhận.
Mở trang câu hỏi này →
AResets the state
BHandles unknown actions
CThrows an error for unknown actions
DReturns the current state
Lời giải
Đáp án đúng gồm ba ý: "Handles unknown actions", "Throws an error for unknown actions" và "Returns the current state". Reducer thường dùng switch theo action.type, và nhánh default là nơi rơi vào khi gặp action không thuộc các case đã viết, tức là nó xử lý action không nhận ra. Cách xử lý thì có hai lối đều được dạy: trong Redux, nhánh default trả lại state hiện tại vì mọi reducer đều nhận mọi action được dispatch, kể cả action dành cho reducer khác, nên phải để state nguyên vẹn; còn ví dụ useReducer trong tài liệu React lại viết nhánh default ném lỗi kiểu Unknown action để phát hiện sớm action gõ sai. Hai lối này loại trừ nhau trong cùng một reducer, viết theo lối nào là tuỳ chỗ dùng, nhưng cả hai đều là hành vi đúng của nhánh default. "Resets the state" sai vì đưa state về giá trị ban đầu mỗi khi gặp action lạ sẽ xoá sạch dữ liệu người dùng vừa tạo, chẳng hạn khi một reducer khác đang xử lý action đó.
Mở trang câu hỏi này →
AHooks allow React to maintain internal state without classes
BHooks simplify sharing functionality between components
CHooks remove the need for functional components
DHooks only support stateful components
Lời giải
Đáp án đúng: "Hooks allow React to maintain internal state without classes". Trước React 16.8, chỉ class component mới có state và phương thức vòng đời; Hooks như useState, useEffect cho phép function component tự giữ state nội bộ và xử lý side effect (tác dụng phụ) mà không phải viết class, không phải dùng this hay bind, đây là động lực chính khiến Hooks ra đời. "Hooks simplify sharing functionality between components" là một lợi ích có thật nhờ custom hook, nhưng nó là hệ quả của việc đưa state vào hàm, còn câu hỏi hỏi lợi thế chủ yếu nên việc giữ state mà không cần class mới là cốt lõi. "Hooks remove the need for functional components" sai ngược lại, Hooks chỉ chạy được bên trong function component hoặc custom hook. "Hooks only support stateful components" sai vì component dùng Hooks có thể không có state, chẳng hạn chỉ dùng useContext hay useEffect.
Mở trang câu hỏi này →
Đề bài
const [isOpen, setIsOpen] = useState(false);
const [buttonText, setButtonText] = useState(isOpen ? "se" : "Open");
function toggle() {
  setIsOpen(!isOpen);
  setButtonText(isOpen ? "Open" : "se");
}
AThe code above is fine as it is.
BRemove buttonText from state and calculate it dynamically in the render method based on isOpen.
CKeep both isOpen and buttonText in state but update them separately.
DUse useEffect to sync buttonText with isOpen.
Lời giải
Đáp án đúng: "Remove buttonText from state and calculate it dynamically in the render method based on isOpen.". buttonText hoàn toàn suy ra được từ isOpen, nên giữ nó thành state riêng là hai nguồn sự thật cho cùng một thông tin. Lần theo toggle: setIsOpen(!isOpen) chưa đổi isOpen ngay, trong lần gọi này isOpen vẫn là giá trị cũ, nên setButtonText phải cố tình đảo điều kiện mới ra đúng chữ; chỉ cần sửa một chỗ mà quên chỗ kia, hay cập nhật isOpen từ nơi khác, là chữ trên nút lệch với trạng thái. Nguyên tắc của React là không lưu thứ tính được từ state khác: bỏ buttonText khỏi state và tính chữ của nút từ isOpen bằng toán tử ba ngôi ngay trong thân component. "The code above is fine as it is." sai vì đoạn mã chạy được nhưng dư state và dễ mâu thuẫn. "Keep both isOpen and buttonText in state but update them separately." chính là cách đang gây rủi ro lệch nhau. "Use useEffect to sync buttonText with isOpen." chạy được nhưng thêm một lần render thừa và một khoảnh khắc hai state lệch nhau; tài liệu React khuyên tránh effect chỉ để đồng bộ state suy diễn.
Mở trang câu hỏi này →
AUse a functional component with the map method
BUse a class component with componentDidMount
CUse a higher-order component
DUse a lifecycle method to fetch data
Lời giải
Đáp án đúng: "Use a functional component with the map method". Component chỉ hiển thị một danh sách nhận qua props thì không cần state hay phương thức vòng đời: một function component nhận props.items rồi gọi items.map để biến mỗi phần tử thành một thẻ li có key riêng, React dùng key đó để đối chiếu khi danh sách thay đổi. "Use a class component with componentDidMount" thừa: componentDidMount dùng cho tác vụ phụ sau lần gắn đầu tiên như gọi API, trong khi dữ liệu ở đây đã có sẵn trong props. "Use a higher-order component" là kỹ thuật bọc component để tái dùng logic chung, ví dụ kiểm tra đăng nhập, không phải cách hiển thị một danh sách. "Use a lifecycle method to fetch data" sai yêu cầu vì dữ liệu được truyền qua props chứ không phải tải về từ máy chủ.
Mở trang câu hỏi này →
Afunction App() { return (<div><Header /><MainContent /><Footer /></div>); }
Bfunction App() { return (<div><Header /><Footer /><MainContent /></div>); }
Cfunction App() { return (<div><MainContent /><Header /><Footer /></div>); }
Dfunction App() { return (<div><Footer /><Header /><MainContent /></div>); }
Lời giải

Đáp án đúng: "function App() {

Lời giải
return (<div><Header /><MainContent /><Footer /></div>);

}". Composition (kết hợp) nghĩa là dựng component lớn bằng cách ghép các component nhỏ làm con của nó; bố cục trang thông thường đọc từ trên xuống nên App phải render Header trước, rồi MainContent ở giữa, cuối cùng là Footer, và JSX hiển thị các con đúng theo thứ tự chúng được viết trong thẻ div. Cả bốn đoạn mã đều hợp lệ về cú pháp và đều là composition, chỉ khác nhau ở thứ tự: đoạn chứa "

Lời giải
<Header />
<Footer />
<MainContent />

" đặt chân trang lên trước nội dung chính; đoạn chứa "

Lời giải
<div>
  <MainContent />
  <Header />

" đẩy nội dung chính lên trên cả đầu trang; đoạn chứa "

Lời giải
<div>
  <Footer />
  <Header />

" đưa chân trang lên vị trí đầu tiên. Ba bố cục đó vẫn chạy được nhưng sai yêu cầu đầu trang, nội dung chính rồi chân trang.

Mở trang câu hỏi này →
ASOAP (Simple Object Access Protocol)
BRPC (Remote Procedure Call)
CMVC (Model-View-Controller)
DRESTful (Representational State Transfer)
Lời giải
Đáp án đúng: "RESTful (Representational State Transfer)". REST là phong cách kiến trúc do Roy Fielding mô tả cho dịch vụ web: mọi thứ là tài nguyên định danh bằng URL, thao tác qua các phương thức HTTP chuẩn như GET, POST, PUT, DELETE, giao tiếp không lưu trạng thái (stateless) và thường trao đổi dữ liệu dạng JSON; dịch vụ tuân theo các nguyên tắc đó được gọi là RESTful. "SOAP (Simple Object Access Protocol)" sai vì SOAP là một giao thức riêng, gói thông điệp trong phong bì XML và mô tả dịch vụ bằng WSDL, là cách tiếp cận khác hẳn REST. "RPC (Remote Procedure Call)" sai vì RPC xoay quanh việc gọi thủ tục, tức hướng hành động, còn REST hướng tài nguyên. "MVC (Model-View-Controller)" sai vì đó là mẫu thiết kế tổ chức mã bên trong một ứng dụng, tách dữ liệu, giao diện và điều khiển, không phải phong cách thiết kế giao tiếp giữa các dịch vụ web.
Mở trang câu hỏi này →
A{ "name": "John Doe", "age": 30, "city": "New York" }
B{ 'name': 'John Doe', 'age': "30", 'city': 'New York' }
C{ name: "John Doe", age: 30, city: "New York" }
D{ "name" = "John Doe", "age" = 30, "city" = "New York" }
Lời giải
Đáp án đúng: "{ "name": "John Doe", "age": 30, "city": "New York" }". JSON có cú pháp chặt hơn đối tượng JavaScript: mọi khoá phải là chuỗi đặt trong nháy kép, chuỗi giá trị cũng dùng nháy kép, khoá và giá trị ngăn bằng dấu hai chấm, các cặp ngăn bằng dấu phẩy; số như 30 để trần. Phương án đúng thoả đủ các điều đó nên JSON.parse đọc được. "{ 'name': 'John Doe', 'age': "30", 'city': 'New York' }" sai vì JSON không chấp nhận nháy đơn cho khoá hay chuỗi; riêng age thành chuỗi "30" thì hợp lệ nhưng nháy đơn đã đủ làm hỏng. "{ name: "John Doe", age: 30, city: "New York" }" là cú pháp đối tượng JavaScript hợp lệ, nhưng không phải JSON vì khoá không nằm trong nháy kép. "{ "name" = "John Doe", "age" = 30, "city" = "New York" }" sai vì JSON dùng dấu hai chấm giữa khoá và giá trị, dấu bằng không có nghĩa gì trong JSON.
Mở trang câu hỏi này →
Aconst MyComponent = () => { const dispatch = useDispatch(); return <div>My Component</div>; };
Bconst MyComponent = () => { const dispatch = useDispatch; return <div>My Component</div>; };
Cconst MyComponent = () => { const dispatch = dispatch(); return <div>My Component</div>; };
Dconst MyComponent = () => { const dispatch = useDispatch(); return <div>My Component with {dispatch}</div>; };
Lời giải

Đáp án đúng: "const MyComponent = () => { const dispatch = useDispatch(); return <div>My Component</div>; };". useDispatch là hook của React Redux, phải GỌI nó ở cấp cao nhất của function component để nhận về hàm dispatch của store, sau đó dùng dispatch(action) trong các hàm xử lý sự kiện để gửi action tới reducer. Phương án viết "dispatch = useDispatch;" thiếu cặp ngoặc gọi hàm, nên biến dispatch chỉ giữ chính hàm hook chứ không phải hàm dispatch của store, gọi dispatch(action) về sau là gọi hook sai chỗ. Phương án viết "const dispatch = dispatch()" gọi một biến ngay trong câu khai báo chính nó; hằng const còn ở vùng chết tạm thời (temporal dead zone) nên ném ReferenceError, và cũng không hề dùng useDispatch. Phương án hiển thị "My Component with {dispatch}" lấy được dispatch đúng cách nhưng lại nhúng một hàm vào JSX làm nội dung con; React không render được hàm và sẽ cảnh báo, nên đó không phải cách dùng useDispatch đúng.

Mở trang câu hỏi này →
ATo set up a simple static web server that serves data to clients.
BTo encrypt data during transmission between client and server.
CTo manage client authentication and session data.
DTo provide a full-featured backend for the React application.
Lời giải
Đáp án đúng: "To set up a simple static web server that serves data to clients.". json-server dựng nhanh một server giả lập từ một tệp JSON: mỗi khoá trong tệp thành một endpoint REST, client gọi GET, POST, PUT, DELETE như với backend thật. Nó giúp front-end phát triển và thử luồng giao tiếp client-server khi backend chưa sẵn; dữ liệu nó phục vụ chỉ là nội dung tệp, không có logic nghiệp vụ, nên được xem là một server đơn giản phục vụ dữ liệu. Nói chặt hơn, json-server vẫn ghi thay đổi ngược vào tệp nên không tĩnh tuyệt đối, nhưng đây vẫn là mô tả sát nhất. "To encrypt data during transmission between client and server." là việc của HTTPS và TLS. "To manage client authentication and session data." sai vì json-server không có sẵn đăng nhập hay phiên. "To provide a full-featured backend for the React application." sai vì nó không có phân quyền, kiểm tra dữ liệu hay cơ sở dữ liệu thật, chỉ dùng cho phát triển và thử nghiệm.
Mở trang câu hỏi này →
A<Route>
B<Router>
C<Link>
D<Navigation>
Lời giải

Đáp án đúng: "<Route> ". Trong React Router v6, mỗi thẻ Route khai báo một tuyến (route) gồm path là đường dẫn cần khớp và element là component hiển thị khi khớp, các Route được đặt trong Routes để thư viện chọn ra tuyến phù hợp. "<Router> " là bộ định tuyến bao ngoài cung cấp ngữ cảnh lịch sử điều hướng (BrowserRouter, HashRouter là các biến thể của nó); nó cần có nhưng không khai báo tuyến cụ thể nào. "<Link> " tạo liên kết điều hướng tới một đường dẫn mà không tải lại trang; nó dẫn người dùng tới một route chứ không định nghĩa route. "<Navigation> " không phải component của React Router; thư viện có Navigate để chuyển hướng bằng mã và NavLink cho liên kết có trạng thái đang chọn.

Mở trang câu hỏi này →
ARoutes is for styling, and Route is for defining event handlers.
BRoutes is for managing state, and Route is for rendering components.
CRoutes is used to wrap Route components and define the application's routes, while Route is used to define an individual route.
DRoutes is for client-side logic, and Route is for server-side logic
Lời giải
Đáp án đúng: "Routes is used to wrap Route components and define the application's routes, while Route is used to define an individual route.". Trong React Router v6, Routes là vùng chứa bao các Route con: mỗi khi URL đổi, nó xét toàn bộ cây Route bên trong, chọn route khớp nhất và render element của route đó; còn mỗi Route mô tả một tuyến riêng lẻ bằng prop path và prop element (component sẽ hiện), có thể lồng nhau để tạo route con hiển thị qua Outlet. Phương án "Routes is for styling, and Route is for defining event handlers." sai vì cả hai không liên quan tới định kiểu giao diện hay xử lý sự kiện. Phương án "Routes is for managing state, and Route is for rendering components." đúng một nửa ở chỗ Route quyết định component nào hiện, nhưng Routes không phải công cụ quản lý state. Phương án "Routes is for client-side logic, and Route is for server-side logic" sai vì cả hai cùng chạy phía client trong trình duyệt, chúng chia việc theo quan hệ bao chứa chứ không theo client và server.
Mở trang câu hỏi này →
A<Route path="/users?id" element={<User />} />
B<Route path="/users/:id" element={<User />} />
C<Route path="/users/{id}" element={<User />} />
D<Route path="/users/#id" element={<User />} />
Lời giải

Đáp án đúng: "<Route path="/users/:id" element={ <User /> } />". Trong React Router v6, một đoạn đường dẫn bắt đầu bằng dấu hai chấm là tham số động (dynamic segment): đường dẫn /users/123 khớp với mẫu này và giá trị 123 được gán cho tham số id; bên trong component User, ta lấy nó bằng hook useParams, nhận object có id là chuỗi "123". "<Route path="/users?id" element={ <User /> } />" sai vì phần sau dấu hỏi là query string, React Router không dùng nó để so khớp đường dẫn, nên mẫu này không bắt được /users/123. "<Route path="/users/{id}" element={ <User /> } />" sai vì cặp ngoặc nhọn là cú pháp tham số của framework khác như ASP.NET, còn React Router coi đây là chữ thường cần khớp nguyên văn. "<Route path="/users/#id" element={ <User /> } />" sai vì dấu thăng mở đầu phần hash của URL, không phải ký hiệu tham số trong path.

Mở trang câu hỏi này →
APrevent unnecessary component re-renders
BAutomatically synchronize component state with global state
CGuarantee object references don't change during re-rendering
DSimplify the process of context management
Lời giải
Đáp án đúng gồm hai ý: "Prevent unnecessary component re-renders" và "Guarantee object references don't change during re-rendering". React.memo bọc một component để React bỏ qua việc render lại nó khi các prop không đổi (so nông từng prop), còn useMemo ghi nhớ kết quả tính toán và trả về đúng đối tượng cũ ở các lần render sau chừng nào mảng phụ thuộc chưa đổi, nhờ đó tham chiếu object hay mảng thường giữ nguyên; chữ Guarantee là nói quá, vì tài liệu React coi useMemo chỉ là tối ưu hiệu năng và React có thể bỏ giá trị đã nhớ, nhưng giữ ổn định tham chiếu vẫn là công dụng được tính ở đây; hai thứ thường đi cùng nhau vì nếu mỗi lần render lại tạo object mới để truyền xuống thì React.memo so prop sẽ luôn thấy khác. "Automatically synchronize component state with global state" sai vì cả hai chỉ là công cụ tối ưu hiệu năng, không đồng bộ state với store toàn cục; việc đó thuộc về Redux hay Context. "Simplify the process of context management" sai vì chúng không quản lý Context; một component đã bọc React.memo vẫn render lại khi giá trị Context mà nó đọc thay đổi.
Mở trang câu hỏi này →