Danh sách câu hỏi của đề

Câu hỏi: FER202 Phát triển web Front-End với React – Bộ ôn tập thi lại số 1

50 câu trắc nghiệm kèm lời giải của môn FER202 - Phát triển web Front-End với React, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–50.

Danh sách câu hỏi

50/50 câuHết danh sách
AReact-Bootstrap only provides components for CSS styling
BIt enables developers to create modular and reusable UI elements as React components.
CIt requires custom JavaScript to be written for each component.
DComponents can only be used once in the application
Lời giải
Đáp án đúng: "It enables developers to create modular and reusable UI elements as React components.". Component-Based nghĩa là mỗi thành phần của Bootstrap được cung cấp dưới dạng một component React như Button, Card, Modal: nhận props, tự quản lý trạng thái, có thể ghép lồng nhau và dùng lại ở nhiều nơi, nhờ đó giao diện được chia thành các khối mô-đun dễ bảo trì. "React-Bootstrap only provides components for CSS styling" sai vì component của React-Bootstrap không chỉ tạo kiểu CSS mà còn mang hành vi như mở modal, thu gọn navbar. "It requires custom JavaScript to be written for each component." ngược lại: thư viện đã cài sẵn hành vi bằng React, người dùng không phải viết JavaScript riêng cho từng component. "Components can only be used once in the application" sai vì tính tái sử dụng chính là điểm cốt lõi; một component có thể dùng bao nhiêu lần cũng được.
Mở trang câu hỏi này →
A<Child onClick={handleClick()} />
B<Child handleClick={handleClick} />
C<Child onClick={handleClick} />
D<Child handleClick={handleClick()} />
Lời giải

Đáp án đúng: "

Lời giải
<Child onClick={
  handleClick
}
/>

". Để truyền hàm làm prop, đặt chính tham chiếu hàm trong ngoặc nhọn, không kèm dấu gọi hàm; Child nhận prop onClick và tự gọi nó khi có sự kiện, chẳng hạn gắn vào nút bên trong. Tên onClick theo quy ước đặt tên prop sự kiện là on cộng tên sự kiện. Cần nói thẳng: "

Lời giải
<Child handleClick={
  handleClick
}
/>

" cũng truyền đúng một hàm, chỉ khác tên prop, và trong Child dùng props.handleClick vẫn chạy; nó không sai về cơ chế, chỉ lệch quy ước đặt tên prop sự kiện mà đáp án này theo. "

Lời giải
<Child onClick={
  handleClick()
}
/>

" sai vì có dấu ngoặc tròn nên handleClick bị gọi ngay mỗi lần cha render, prop nhận giá trị trả về chứ không phải hàm, và nếu hàm đổi state sẽ gây vòng render vô hạn. "

Lời giải
<Child handleClick={
  handleClick()
}
/>

" mắc cùng lỗi gọi hàm ngay khi render, chỉ khác tên prop.

Mở trang câu hỏi này →
AUtilize the <Switch> component to handle nested routes
BImplement a routing table using an array of route objects
CUse the <Route> component with nested <Route> components
DDirect routes using query parameters in URL path names
Lời giải

Đáp án đúng: "Use the <Route> component with nested <Route> components". Trong React Router v6, tuyến lồng nhau được khai báo bằng cách đặt các Route con bên trong một Route cha; path của Route con được nối tiếp vào path của cha, và component của Route cha đặt Outlet ở chỗ muốn hiển thị nội dung của tuyến con đang khớp. "Utilize the <Switch> component to handle nested routes" sai vì Switch là component của React Router v5 và đã bị thay bằng Routes ở v6; hơn nữa Switch chỉ chọn tuyến đầu tiên khớp chứ không tự tạo cấu trúc lồng. "Implement a routing table using an array of route objects" chỉ đúng trong hoàn cảnh khác: v6 cho khai báo mảng đối tượng có thuộc tính children qua useRoutes hoặc createBrowserRouter, nhưng câu hỏi hỏi cách định nghĩa cấu trúc lồng bên trong component cha bằng JSX, và cách được dạy là Route lồng Route. "Direct routes using query parameters in URL path names" sai vì query string (phần sau dấu ?) chỉ mang dữ liệu đọc bằng useSearchParams, không tham gia khớp tuyến nên không tạo được cấu trúc lồng.

Mở trang câu hỏi này →
Aimport { useNavigate } from 'react-router';
Bimport { useNavigate } from 'react-router-dom';
Cimport { useNavigate } from 'react-router-native';
Dimport { useNavigate } from 'react-navigation';
Lời giải
Đáp án đúng: "import { useNavigate } from 'react-router-dom';". Với ứng dụng web chạy React Router v6, các hook điều hướng như useNavigate, useParams, useLocation được nhập từ gói react-router-dom, gói này gồm lõi định tuyến cộng phần dành cho trình duyệt như BrowserRouter, Link. "import { useNavigate } from 'react-router';" là gói lõi; lõi cũng chứa useNavigate, và từ React Router v7 gói này trở thành điểm nhập chính, nhưng ở v6 cho ứng dụng web cách nhập chuẩn được hướng dẫn là từ react-router-dom nên đây là đáp án. "import { useNavigate } from 'react-router-native';" dành cho ứng dụng React Native, không phải web. "import { useNavigate } from 'react-navigation';" sai vì React Navigation là thư viện khác của React Native, dùng hook useNavigation chứ không có useNavigate.
Mở trang câu hỏi này →
ABy using the event.target property
BBy using the event.data property
CBy using the bind method when binding the event handler
DReact 19 does not support passing additional arguments to event handlers
Lời giải

Đáp án đúng: "By using the bind method when binding the event handler". Hàm xử lý sự kiện được React gọi với một đối số là đối tượng sự kiện, nên muốn truyền thêm dữ liệu như id của dòng được nhấp thì phải tạo trước một hàm mới đã gắn sẵn đối số đó; Function.prototype.bind làm đúng việc này, ví dụ onClick={

Lời giải
handleDelete.bind(null, id)
}

sẽ gọi handleDelete(id, event). Cách tương đương hay gặp hơn là hàm mũi tên onClick={() => handleDelete(id)}, cùng nguyên lý tạo hàm bọc. "By using the event.target property" sai vì event.target chỉ là phần tử DOM phát ra sự kiện; đọc thuộc tính của nó là cách lấy dữ liệu gián tiếp, không phải truyền đối số. "By using the event.data property" sai vì sự kiện nhấp không có thuộc tính data để chứa đối số tự chọn; data chỉ có ở một số loại sự kiện như sự kiện nhập liệu. "React 19 does not support passing additional arguments to event handlers" sai vì React 19 vẫn cho làm như mọi phiên bản trước.

Mở trang câu hỏi này →
Aresponse.data()
Bresponse.json()
Cresponse.jsonText()
Dresponse.body.json()
Lời giải
Đáp án đúng: "response.json()". Hàm fetch trả về một Promise cho object Response; phần thân của response là một luồng dữ liệu, nên phải gọi phương thức json() để đọc hết thân và phân tích (parse) nó thành object JavaScript, và chính phương thức này cũng trả về Promise, vì vậy ta thường nối tiếp bằng then hoặc dùng await trước nó. "response.data()" sai vì Response của Fetch API không có phương thức data; thói quen đọc thuộc tính data đến từ thư viện axios, nơi dữ liệu đã được parse sẵn và data là thuộc tính chứ không phải hàm. "response.jsonText()" sai vì không tồn tại phương thức này; thứ gần nhất là text(), trả về thân dưới dạng chuỗi thô. "response.body.json()" sai vì body là một ReadableStream, không có phương thức json; việc đọc và parse phải gọi thẳng trên response.
Mở trang câu hỏi này →
Aconst [state, dispatch] = useReducer(reducer, initialState);
Bconst [state, setState] = useReducer(reducer, initialState);
Cimport React, { useReducer } from 'react';
Dimport { useReducer } from 'react-redux';
Lời giải
Đáp án đúng gồm hai ý: "const [state, dispatch] = useReducer(reducer, initialState);" và "import React, { useReducer } from 'react';". useReducer là hook có sẵn trong gói react nên phải import từ react, sau đó gọi với hàm reducer và state ban đầu; hook trả về mảng hai phần tử gồm state hiện tại và hàm dispatch để gửi action, reducer nhận state cũ cùng action và trả về state mới. "const [state, setState] = useReducer(reducer, initialState);" không được chọn vì phần tử thứ hai là dispatch nhận action chứ không nhận giá trị state mới; đặt tên setState về cú pháp vẫn chạy nhưng gây hiểu nhầm với hàm đặt state của useState, nên không phải cách viết đúng quy ước. "import { useReducer } from 'react-redux';" sai vì react-redux không xuất useReducer; thư viện này cung cấp Provider, useSelector, useDispatch để làm việc với store Redux, còn useReducer là hook quản lý state cục bộ của chính React.
Mở trang câu hỏi này →
ARepresentational State Transfer
BRemote Execution and State Transfer
CResourceful Endpoint and Service Tools
DResponsive Event-driven Server Technologies
Lời giải
Đáp án đúng: "Representational State Transfer". REST là viết tắt của Representational State Transfer (chuyển giao trạng thái biểu diễn), phong cách kiến trúc do Roy Fielding mô tả năm 2000: mỗi tài nguyên có một URL, client thao tác bằng các phương thức HTTP như GET, POST, PUT, DELETE và nhận về một biểu diễn của tài nguyên (thường là JSON), mỗi yêu cầu tự mang đủ thông tin (stateless). "Remote Execution and State Transfer" là cụm tự đặt, REST không nói về thực thi từ xa. "Resourceful Endpoint and Service Tools" cũng là cụm tự đặt, ghép các chữ cái cho khớp R-E-S-T nhưng không phải nghĩa thật. "Responsive Event-driven Server Technologies" sai vì REST không gắn với máy chủ hướng sự kiện hay thiết kế responsive.
Mở trang câu hỏi này →
AData is always instantaneously available.
BNetwork operations inherently cause unexpected delays and are asynchronous
CCommunication is always synchronous and predictable.
DClient-server communication primarily focuses on local data storage.
Lời giải
Đáp án đúng: "Network operations inherently cause unexpected delays and are asynchronous". Khi client gọi server, dữ liệu phải đi qua mạng nên thời gian phản hồi không đoán trước được: có thể nhanh, chậm, hết thời gian chờ hay lỗi hẳn; vì thế lập trình viên phải coi mọi thao tác mạng là bất đồng bộ, gọi bằng fetch hay axios trả về Promise, dùng async, await hoặc then, đồng thời hiện trạng thái đang tải và xử lý lỗi thay vì chặn giao diện để chờ kết quả. Phương án "Data is always instantaneously available." sai vì luôn có độ trễ truyền và xử lý ở server. Phương án "Communication is always synchronous and predictable." ngược với bản chất mạng; gọi đồng bộ sẽ làm treo luồng giao diện của trình duyệt. Phương án "Client-server communication primarily focuses on local data storage." nhầm với lưu trữ cục bộ như localStorage, trong khi giao tiếp client và server là trao đổi dữ liệu qua mạng giữa hai máy.
Mở trang câu hỏi này →
AuseState should be useReducer
Buse setItems([...items, 'new'])
Cpush is not a valid method
DsetItems must take a string
Lời giải
Đáp án đúng: "use setItems([...items, 'new'])". State trong React phải được coi là bất biến (immutable): items.push('new') sửa trực tiếp mảng cũ, rồi setItems(items) truyền lại chính tham chiếu đó, React so sánh bằng Object.is thấy giá trị không đổi nên bỏ qua lần render lại và giao diện không hiện mục mới. Cách đúng là tạo mảng mới bằng toán tử spread (trải mảng) gồm các phần tử cũ cộng thêm 'new', tham chiếu khác đi nên component render lại. "useState should be useReducer" không đúng vì useReducer chỉ là lựa chọn khác cho state phức tạp, nó cũng đòi trả về state mới và không tự sửa được lỗi đột biến mảng. "push is not a valid method" sai vì push là phương thức hợp lệ của Array, vấn đề là nó đột biến mảng chứ không phải không tồn tại. "setItems must take a string" sai vì hàm cập nhật nhận giá trị thuộc kiểu bất kỳ hoặc một hàm cập nhật, ở đây state là mảng nên truyền mảng là đúng.
Mở trang câu hỏi này →