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.440/20.347 câuCòn 15.907
ATo fetch data from APIs
BTo dispatch actions to components
CTo update the store by returning the new state based on the action received
DTo create components dynamically
Lời giải
Đáp án đúng: "To update the store by returning the new state based on the action received". Reducer là hàm thuần (pure function) nhận state hiện tại và action, trả về state mới mà không sửa trực tiếp state cũ; mỗi khi có action được dispatch, store của Redux gọi reducer, lưu kết quả làm state mới và các component đang theo dõi sẽ render lại. "To fetch data from APIs" sai vì gọi API là tác dụng phụ, phải làm trong middleware như redux-thunk hoặc createAsyncThunk của Redux Toolkit; reducer không được có tác dụng phụ. "To dispatch actions to components" nhầm vai: dispatch là hàm của store, component gọi dispatch để gửi action tới reducer chứ reducer không dispatch. "To create components dynamically" không liên quan: tạo component là việc của React, Redux chỉ quản lý state.
Mở trang câu hỏi này →
Anpm add json-server
Bnode install json-server
Cnpm get json-server
Dnpm install json-server -g
Lời giải
Đáp án đúng: "npm install json-server -g". json-server là gói npm dựng nhanh một REST API giả từ tệp db.json để front-end thử gọi dữ liệu; lệnh npm install kèm cờ -g (viết đầy đủ là --global) cài gói vào thư mục toàn cục của máy, nhờ đó lệnh json-server dùng được ở mọi thư mục, ví dụ json-server --watch db.json --port 3001. Phương án "npm add json-server" dùng add, vốn là bí danh của install trong npm, nhưng thiếu -g nên chỉ cài vào dự án hiện tại chứ không cài toàn cục. Phương án "node install json-server" sai vì node là trình chạy JavaScript, không có lệnh con install để cài gói. Phương án "npm get json-server" sai vì npm không có lệnh get để cài gói; lệnh get của npm chỉ dùng để đọc một giá trị cấu hình.
Mở trang câu hỏi này →
AUsing the useState hook.
BUsing the useReducer hook.
CUsing a Provider component.
DUsing the useRef hook.
Lời giải
Đáp án đúng gồm hai ý: "Using the useState hook." và "Using the useReducer hook.". Trong function component, state là dữ liệu React ghi nhớ giữa các lần render và thay đổi nó sẽ khiến component render lại; useState khởi tạo một giá trị kèm hàm đặt giá trị mới, phù hợp state đơn giản, còn useReducer khởi tạo state từ giá trị ban đầu và cập nhật qua hàm reducer nhận state cũ cùng action, phù hợp khi state có nhiều trường hoặc logic chuyển đổi phức tạp. "Using a Provider component." sai vì Provider của Context chỉ truyền một giá trị xuống cây con để tránh truyền props qua nhiều tầng; bản thân giá trị đó vẫn phải được tạo và quản lý bằng useState hoặc useReducer ở đâu đó. "Using the useRef hook." sai vì useRef giữ một giá trị có thể thay đổi qua thuộc tính current nhưng đổi nó không gây render lại, nên dùng để giữ tham chiếu DOM hoặc giá trị phụ chứ không phải để quản lý state hiển thị.
Mở trang câu hỏi này →
Athis.props.name
Bprops.name
CuseState.name
DgetProps().name
Lời giải
Đáp án đúng: "props.name". Component hàm nhận các prop do component cha truyền xuống qua tham số đầu tiên, thường đặt tên là props, đó là một đối tượng chứa mọi thuộc tính viết trên thẻ, nên prop name được đọc là props.name; cách hay gặp khác là bóc tách ngay ở tham số, viết function Greeting({ name }), cùng ý nghĩa. "this.props.name" sai vì đó là cách đọc prop trong component dạng lớp, nơi this trỏ tới thể hiện của lớp; component hàm không có this gắn với component. "useState.name" sai vì useState là hook tạo state cục bộ, gọi useState trả về một mảng gồm giá trị và hàm cập nhật, nó không chứa prop nào. "getProps().name" sai vì React không có hàm getProps; prop đến thẳng qua tham số của hàm, không cần gọi gì để lấy.
Mở trang câu hỏi này →
ATo make the code easier to read
BTo bundle all components into a single large file
CTo reduce the initial load time by loading parts of the app only when needed
DTo split CSS and JavaScript into separate files
Lời giải
Đáp án đúng: "To reduce the initial load time by loading parts of the app only when needed". Code splitting (tách mã) chia gói JavaScript lớn thành nhiều chunk nhỏ; với React.lazy và import() động, mã của một trang hay component chỉ được tải khi người dùng thực sự cần tới nó, nhờ vậy lần tải đầu nhẹ hơn và trang hiện nhanh hơn, còn Suspense hiển thị giao diện chờ trong lúc chunk đang tải. "To make the code easier to read" không phải mục đích, tách mã là tối ưu lúc chạy chứ không đổi cách tổ chức mã nguồn cho dễ đọc. "To bundle all components into a single large file" ngược hẳn, đó chính là trạng thái mặc định mà code splitting muốn tránh. "To split CSS and JavaScript into separate files" là việc trích CSS ra tệp riêng của công cụ build, khác với tách JavaScript theo nhu cầu tải.
Mở trang câu hỏi này →
AThe component to display while the lazy component is loading
BThe component to display when an error occurs during loading
CThe component to display when the lazy component is rendered
DThe component to display when Suspense is not supported
Lời giải
Đáp án đúng: "The component to display while the lazy component is loading". Khi bọc một component nạp bằng React.lazy trong Suspense, lần render đầu mã của nó chưa tải xong nên component đó tạm treo (suspend); lúc ấy Suspense hiện phần tử truyền qua prop fallback, thường là spinner hay dòng chữ đang tải, và tự thay bằng component thật khi tải xong. "The component to display when an error occurs during loading" là việc của Error Boundary, thường bọc bên ngoài Suspense để bắt lỗi tải. "The component to display when the lazy component is rendered" sai vì lúc đó chính component lazy hiện ra, fallback đã biến mất. "The component to display when Suspense is not supported" sai vì fallback không phải phương án dự phòng cho môi trường không hỗ trợ; Suspense là một phần của React, fallback chỉ gắn với trạng thái đang chờ.
Mở trang câu hỏi này →
A<Route path="/user/id" component={UserProfile} />
B<Route path="/user/:id" component={UserProfile} />
C<Route path="/user?=id" component={UserProfile} />
D<Route path="/user={id}" component={UserProfile} />
Lời giải

Đáp án đúng: "

Lời giải
<Route path="/user/:id" component={
  UserProfile
}
/>

". Trong React Router, dấu hai chấm đặt trước một đoạn đường dẫn đánh dấu tham số động: path="/user/:id" khớp /user/42 hay /user/abc và đưa giá trị đó vào match.params.id ở v5 hoặc useParams() ở v6. Prop component={UserProfile} là cú pháp v5 (v6 viết element), nhưng điểm được hỏi là dấu hai chấm. "

Lời giải
<Route path="/user/id" component={
  UserProfile
}
/>

" là đường dẫn tĩnh, chỉ khớp đúng chữ id. "

Lời giải
<Route path="/user?=id" component={
  UserProfile
}
/>

" dùng ký hiệu của chuỗi truy vấn; phần sau dấu hỏi không thuộc path nên không khai báo được tham số theo cách này. "

Lời giải
<Route path="/user={id}" component={
  UserProfile
}
/>

" đặt dấu bằng và ngoặc nhọn vào path, cú pháp đường dẫn không hiểu chúng là tham số mà coi như ký tự thường.

Mở trang câu hỏi này →
4428What does the useNavigate hook return?4 lựa chọn
AAn object with navigation methods.
BA navigate function that can be used to navigate to a new location
CA boolean indicating navigation status
DA string representing the current route.
Lời giải
Đáp án đúng: "A navigate function that can be used to navigate to a new location". Trong React Router v6, useNavigate trả về đúng một hàm, thường đặt tên là navigate; gọi navigate('/home') để chuyển sang đường dẫn mới, navigate(-1) để lùi một bước lịch sử, hoặc truyền thêm tùy chọn replace, state, nên hook này dùng cho điều hướng bằng mã, chẳng hạn sau khi gửi form hay đăng nhập xong. Phương án "An object with navigation methods." mô tả đối tượng history có push, replace của React Router v5 (lấy bằng useHistory), không phải giá trị của useNavigate. Phương án "A boolean indicating navigation status" sai vì muốn biết trạng thái điều hướng thì dùng useNavigation trong data router, còn useNavigate không trả về boolean. Phương án "A string representing the current route." là thông tin lấy được từ useLocation qua thuộc tính pathname, không phải từ useNavigate.
Mở trang câu hỏi này →
A.popover
B.modal
C.carousel
D.nav-pills
Lời giải
Đáp án đúng: ".carousel". Trong Bootstrap, component Carousel là trình chiếu (slideshow) xoay vòng qua một loạt mục như ảnh hoặc khối nội dung, có nút trước sau, chấm chỉ vị trí và có thể tự chuyển sau một khoảng thời gian; ta dựng nó bằng lớp carousel trên khung ngoài cùng các lớp carousel-inner và carousel-item cho từng slide, còn React-Bootstrap có sẵn component Carousel tương ứng. ".popover" sai vì popover là hộp nổi nhỏ hiện cạnh một phần tử khi bấm hoặc rê chuột để hiển thị thêm thông tin, không chuyển qua nhiều slide. ".modal" sai vì modal là hộp thoại phủ lên trang để hiển thị nội dung hoặc biểu mẫu và chờ người dùng đóng lại. ".nav-pills" sai vì đây là kiểu trình bày thanh điều hướng với các mục dạng viên bo tròn, dùng cho menu hoặc tab chứ không phải trình chiếu.
Mở trang câu hỏi này →
ABy using the <div class="grid"> element.
BBy applying the .responsive-grid class to the container element.
CBy using the .row and .col-*-* classes to create rows and columns.
DBy manually specifying the width of each element using CSS.
Lời giải

Đáp án đúng: "By using the .row and .col-*-* classes to create rows and columns.". Hệ lưới của Bootstrap gồm ba lớp: container bao ngoài, row tạo một hàng và col chia hàng thành tối đa 12 phần; dạng col-*-* ghép một mốc màn hình với số cột, ví dụ col-md-6 nghĩa là từ cỡ md trở lên chiếm 6 trên 12 phần, còn dưới cỡ đó thì cột xếp chồng, nên chỉ bằng tên lớp mà bố cục tự đáp ứng theo kích thước màn hình. "By using the <div class="grid"> element." sai vì hệ lưới mặc định của Bootstrap không dựa vào một phần tử grid; phải dùng row và col. "By applying the .responsive-grid class to the container element." sai vì Bootstrap không có lớp responsive-grid; tính đáp ứng đến từ các lớp col có mốc màn hình. "By manually specifying the width of each element using CSS." làm được nhưng là tự viết CSS chứ không dùng Bootstrap, lại phải tự viết media query cho từng mốc màn hình, đúng thứ hệ lưới đã làm sẵn.

Mở trang câu hỏi này →
ASet width in inline CSS
BUse the rows and cols attributes for all form elements
CUse the size variants of the .form-control class, like .form-control-sm or .form-control-lg
DApply custom JavaScript functions
Lời giải
Đáp án đúng: "Use the size variants of the .form-control class, like .form-control-sm or .form-control-lg". Bootstrap 5 có sẵn biến thể kích thước cho ô nhập: thêm .form-control-sm để ô nhỏ hơn hoặc .form-control-lg để ô lớn hơn, các lớp này chỉnh đồng bộ chiều cao, padding, cỡ chữ và bo góc theo hệ thiết kế; với select thì dùng .form-select-sm, .form-select-lg, còn cả cụm input group dùng .input-group-sm, .input-group-lg. "Set width in inline CSS" chỉ đổi bề ngang của một phần tử, không đổi chiều cao hay cỡ chữ, lại đi ngược cách dùng lớp có sẵn của Bootstrap; bề ngang thường điều khiển bằng hệ lưới hoặc lớp w-25, w-50. "Use the rows and cols attributes for all form elements" sai vì rows, cols là thuộc tính riêng của textarea, không áp cho input hay select. "Apply custom JavaScript functions" là không cần thiết, kích thước là việc của CSS và Bootstrap đã có lớp sẵn.
Mở trang câu hỏi này →
ABy offloading all rendering tasks to the client's browser
BBy eliminating the need for any server infrastructure
CBy resulting in faster initial page load times and better search engine optimization (SEO)
DBy simplifying complex client-side state management.
Lời giải
Đáp án đúng: "By resulting in faster initial page load times and better search engine optimization (SEO)". Với server-side rendering (SSR, kết xuất phía máy chủ), Next.js chạy component React trên server và gửi về trình duyệt HTML đã có sẵn nội dung, rồi React mới hydrate (gắn sự kiện) để trang tương tác được. Người dùng thấy nội dung sớm hơn vì không phải chờ tải và chạy hết JavaScript, còn bot của công cụ tìm kiếm đọc được nội dung ngay trong HTML nên SEO tốt hơn. "By offloading all rendering tasks to the client's browser" mô tả client-side rendering, ngược với SSR. "By eliminating the need for any server infrastructure" sai vì SSR chính là cần server chạy mỗi khi có yêu cầu. "By simplifying complex client-side state management." sai vì SSR liên quan cách sinh HTML, không thay thế công cụ quản lý state như Redux hay Context.
Mở trang câu hỏi này →
AExplicit configuration in a central routes.json file.
BFile-system routing, where routes are determined by the structure of files
CDynamic route declarations using React Router
DServer-side API endpoints only
Lời giải
Đáp án đúng: "File-system routing, where routes are determined by the structure of files". Next.js định tuyến theo hệ thống tệp (file-system routing): với Pages Router, tệp pages/about.js trở thành đường dẫn /about; với App Router, mỗi thư mục trong app có tệp page.js là một route, thư mục đặt tên trong ngoặc vuông như [id] là đoạn động. "Explicit configuration in a central routes.json file." sai vì Next.js không đọc một tệp cấu hình tuyến trung tâm nào; muốn thêm trang chỉ cần thêm tệp. "Dynamic route declarations using React Router" là cách của ứng dụng React thuần dùng React Router, còn Next.js có bộ định tuyến riêng và tuyến động khai báo bằng tên tệp hoặc thư mục. "Server-side API endpoints only" sai vì API route chỉ là một loại route; các trang giao diện mới là phần chính, và cả hai đều được xác định bằng cấu trúc tệp.
Mở trang câu hỏi này →
4434Next.js is primarily used for:4 lựa chọn
AStyling static websites
BCreating server-rendered or statically generated React applications
CManaging back-end databases
DHandling real-time communication
Lời giải
Đáp án đúng: "Creating server-rendered or statically generated React applications". Next.js là framework xây trên React, bổ sung những thứ React thuần không có sẵn: định tuyến theo tệp, render phía máy chủ (server-side rendering) ở mỗi request và sinh trang tĩnh (static site generation) lúc build, nhờ đó trang tải nhanh và thân thiện với công cụ tìm kiếm. Mục đích chính của nó vì vậy là dựng ứng dụng React được render trên server hoặc sinh sẵn thành trang tĩnh. Phương án "Styling static websites" sai vì Next.js không phải công cụ CSS; định kiểu trong đó dùng CSS Modules, Tailwind hay thư viện khác. Phương án "Managing back-end databases" sai vì Next.js có route API để viết logic server nhưng không quản lý cơ sở dữ liệu, việc đó thuộc hệ quản trị như PostgreSQL hay ORM. Phương án "Handling real-time communication" là vai trò của WebSocket hay thư viện như Socket.IO, không phải mục tiêu chính của Next.js.
Mở trang câu hỏi này →
AIt provides a comprehensive set of pre-built components for rapid development
BIt enforces strict design patterns to maintain visual consistency.
CIt offers a huge list of utility CSS classes, providing more freedom for custom designs
DIt relies heavily on JavaScript for styling and layout management.
Lời giải
Đáp án đúng: "It offers a huge list of utility CSS classes, providing more freedom for custom designs". Tailwind CSS theo hướng utility-first: thay vì đưa ra nút, thẻ, thanh điều hướng dựng sẵn, nó cung cấp rất nhiều lớp tiện ích nhỏ, mỗi lớp làm một việc như đặt khoảng đệm, màu, cỡ chữ hay bố cục flex, rồi ta ghép chúng ngay trên phần tử để tạo giao diện riêng, nên tự do thiết kế hơn Bootstrap. "It provides a comprehensive set of pre-built components for rapid development" sai vì bộ component dựng sẵn chính là đặc trưng của Bootstrap, không phải của Tailwind. "It enforces strict design patterns to maintain visual consistency." sai vì Tailwind không áp đặt mẫu thiết kế; tính nhất quán đến từ thang giá trị trong tệp cấu hình mà ta tự chỉnh. "It relies heavily on JavaScript for styling and layout management." sai vì Tailwind sinh ra tệp CSS thuần lúc build, giao diện chạy hoàn toàn bằng CSS, không cần JavaScript để định kiểu hay bố cục.
Mở trang câu hỏi này →
AIt manages state updates
BIt handles side effects
CIt returns the JSX that describes the UI
DIt fetches data from an API
Lời giải
Đáp án đúng: "It returns the JSX that describes the UI". Trong component dạng lớp, render là phương thức bắt buộc duy nhất; React gọi nó mỗi khi cần vẽ component và nó trả về JSX mô tả giao diện tương ứng với this.props và this.state hiện tại. render phải thuần (pure): cùng props và state thì trả cùng kết quả, không sửa state, không gọi API. "It manages state updates" sai vì cập nhật state làm qua this.setState, gọi trong hàm xử lý sự kiện hoặc phương thức vòng đời, còn gọi setState trong render sẽ gây vòng lặp render vô hạn. "It handles side effects" sai vì side effect như đăng ký sự kiện hay hẹn giờ được đặt trong componentDidMount và componentDidUpdate, ở component hàm là useEffect. "It fetches data from an API" sai vì lấy dữ liệu cũng là side effect, thường đặt trong componentDidMount; gọi API trong render sẽ gửi request ở mỗi lần render.
Mở trang câu hỏi này →
AProvides a consistent event interface across different browsers
BContains information necessary for event propagation
CReduces the need for garbage collection
DNormalizes browser inconsistencies
Lời giải
Đáp án đúng: "Reduces the need for garbage collection". Câu hỏi dạng phủ định nên phải chọn điều KHÔNG phải lợi ích của synthetic event (sự kiện tổng hợp). SyntheticEvent là lớp bọc của React quanh sự kiện gốc của trình duyệt, mục đích của nó là một giao diện thống nhất và hành vi nhất quán, không phải giảm tải cho bộ thu gom rác; React 16 trở về trước từng tái sử dụng đối tượng sự kiện (event pooling), nhưng từ React 17 cơ chế này bị bỏ vì không đem lại lợi ích đáng kể, nên giảm garbage collection không được tính là lợi ích của synthetic event. "Provides a consistent event interface across different browsers" là lợi ích thật: cùng các thuộc tính target, preventDefault, stopPropagation trên mọi trình duyệt. "Contains information necessary for event propagation" cũng đúng, đối tượng sự kiện mang target, currentTarget, eventPhase và cho phép stopPropagation để điều khiển lan truyền qua cây component. "Normalizes browser inconsistencies" đúng vì React chuẩn hoá các khác biệt như tên sự kiện hay cách đọc phím, nên đây cũng là lợi ích và không được chọn.
Mở trang câu hỏi này →
AInline event handlers improve performance by reducing the number of function calls
BInline event handlers can lead to performance issues due to the creation of new functions on each render
CInline event handlers are the only way to handle events in React
DInline event handlers are more secure than named event handlers
Lời giải
Đáp án đúng: "Inline event handlers can lead to performance issues due to the creation of new functions on each render". Viết một hàm mũi tên ngay trong prop onClick nghĩa là mỗi lần component render, một hàm mới với tham chiếu mới được tạo ra. Bình thường chi phí này rất nhỏ, nhưng khi truyền hàm đó xuống component con bọc React.memo hay dùng làm phụ thuộc của useEffect, tham chiếu đổi mỗi lần sẽ phá ghi nhớ và gây render lại thừa; useCallback là cách giữ tham chiếu ổn định. Vì vậy phát biểu đúng là nó có thể gây vấn đề hiệu năng, chứ không phải luôn luôn. "Inline event handlers improve performance by reducing the number of function calls" sai vì viết inline không giảm lời gọi hàm mà còn tạo thêm hàm. "Inline event handlers are the only way to handle events in React" sai vì có thể truyền một hàm đặt tên như onClick={handleClick}. "Inline event handlers are more secure than named event handlers" sai vì hai cách chỉ khác cú pháp, không khác gì về bảo mật.
Mở trang câu hỏi này →
AIt makes the container take up the entire width of the viewport.
BIt enables the container to display text.
CIt changes the container’s background color.
DIt makes the container fixed width.
Lời giải
Đáp án đúng: "It makes the container take up the entire width of the viewport.". Container mặc định của React-Bootstrap sinh lớp container có max-width cố định theo từng breakpoint (mốc kích thước màn hình) và căn giữa; thêm prop fluid thì đổi thành lớp container-fluid với width 100% ở mọi kích thước, còn fluid="md" cho phép rộng hết khổ tới mốc md. "It enables the container to display text." sai vì container nào cũng chứa được chữ, fluid chỉ thay đổi chiều rộng. "It changes the container’s background color." nhầm: màu nền đặt bằng lớp tiện ích như bg-light hoặc bg-dark, không liên quan tới fluid. "It makes the container fixed width." là hành vi của Container khi không có fluid, tức ngược hẳn với tác dụng của prop này.
Mở trang câu hỏi này →
A<Row> <Container> <Col xs={6}>2 of 3 (wider)</Col> </Container> </Row>
B<Row> <Container> <Column>1 of 3</Column></Container> </Row>
C<Container> <Row> <Col xs={6}>2 of 3 (wider)</Col> </Row> </Container>
D<Container> <Column> <Row xs={6}>2 of 3 (wider)</Row> </Column> </Container>
Lời giải

Đáp án đúng: "

Lời giải
<Container> <Row> <Col xs={
  6
}
>2 of 3 (wider)</Col> </Row> </Container>

". Lưới của React-Bootstrap đi theo đúng thứ bậc của Bootstrap: Container ngoài cùng tạo khung căn lề và padding, Row bên trong tạo hàng flex và bù lề âm, rồi Col là ô cột nằm trong Row, chia hàng thành 12 phần; Col xs={6} chiếm sáu phần tức nửa hàng từ màn nhỏ nhất trở lên. Đoạn mã đúng giữ trọn thứ tự Container, Row, Col. Phương án có mảnh "(wider)</Col> </Container>" đảo ngược hai tầng ngoài, đặt Container trong Row nên cột không còn là con trực tiếp của hàng và lưới vỡ bố cục. Phương án "

Lời giải
<Row>
  <Container>
    <Column>1 of 3</Column>
  </Container>
</Row>

" vừa đảo tầng vừa dùng Column, một component không tồn tại trong React-Bootstrap (tên đúng là Col). Phương án có mảnh "

Lời giải
<Row xs={
  6
}
>2 of 3 (wider)</Row>

" đặt Row bên trong Column, sai cả tên component lẫn thứ bậc, và xs trên Row chỉ quy định số cột mỗi hàng chứ không đặt độ rộng ô như xs của Col.

Mở trang câu hỏi này →