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.360/20.347 câuCòn 15.987
Aconst Dashboard = lazy('./Dashboard');
Bconst Dashboard = React.lazy(import('./Dashboard'));
Cconst Dashboard = React.lazy(() => import('./Dashboard'));
Dconst Dashboard = lazy(() => require('./Dashboard'));
Lời giải

Đáp án đúng: "const Dashboard = React.lazy(() => import('./Dashboard')); ". React.lazy nhận một HÀM không tham số trả về Promise, mà import() động chính là Promise resolve ra module có export default là component; React chỉ gọi hàm này khi Dashboard render lần đầu, và cần bọc Dashboard trong Suspense để có giao diện chờ. "const Dashboard = lazy('./Dashboard');" truyền thẳng chuỗi đường dẫn thay cho hàm, lazy không biết tải gì và báo lỗi khi render. "const Dashboard = React.lazy(import('./Dashboard')); " gọi import() ngay lúc khai báo rồi truyền Promise thay cho hàm, mất tính lười và React cũng báo lỗi vì đối số không phải hàm. "const Dashboard = lazy(() => require('./Dashboard'));" sai vì require nạp module đồng bộ và trả về chính module chứ không phải Promise như lazy cần; require là cú pháp CommonJS nên cũng không tạo chunk tách riêng như import().

Mở trang câu hỏi này →
4342What is event pooling in React?4 lựa chọn
AThe process of reusing event objects for performance optimization.
BThe process of creating multiple event objects for each event.
CThe process of cleaning up event objects after they are used.
DThe process of handling events in a pool of event handlers.
Lời giải
Đáp án đúng: "The process of reusing event objects for performance optimization.". Ở React 16 trở về trước, SyntheticEvent được lấy từ một vùng chứa (pool) dùng chung: sau khi handler chạy xong, React xoá sạch các thuộc tính của đối tượng sự kiện và đưa nó về pool để dùng lại cho sự kiện kế tiếp, nhằm bớt tạo rác cho bộ thu gom bộ nhớ. Vì vậy đọc e.target trong setTimeout hay sau await sẽ ra null, trừ khi gọi e.persist(). Từ React 17 cơ chế này đã bị bỏ vì lợi ích hiệu năng không còn đáng kể. "The process of creating multiple event objects for each event." ngược với ý tưởng tái sử dụng. "The process of cleaning up event objects after they are used." chỉ là một bước bên trong pooling, xoá thuộc tính để dùng lại, chứ không phải toàn bộ khái niệm. "The process of handling events in a pool of event handlers." sai vì pool chứa đối tượng sự kiện, không chứa handler.
Mở trang câu hỏi này →
AQuery parameters, accessed via location.search.
BState variables, declared with useState()
CRoute parameters, marked by a colon (e.g., :id) in the path, which are then passed to the component.
DContext API, provided globally to all components
Lời giải
Đáp án đúng: "Route parameters, marked by a colon (e.g., :id) in the path, which are then passed to the component.". React Router dùng tham số tuyến (route parameter): trong path, đoạn có dấu hai chấm như /products/:id là chỗ trống động, URL /products/7 khớp tuyến đó và giá trị 7 được đưa vào component, đọc qua useParams() ở v6. "Query parameters, accessed via location.search." là tham số truy vấn sau dấu hỏi như ?id=7, đọc qua location.search hoặc useSearchParams; nó vẫn chở được dữ liệu nhưng không phải cơ chế tham số động khai báo trong path mà câu hỏi nói tới. "State variables, declared with useState()" sai vì useState tạo state nội bộ của component, không lấy giá trị từ URL. "Context API, provided globally to all components" sai vì Context API chia sẻ dữ liệu qua cây component, không đọc gì từ URL.
Mở trang câu hỏi này →
AIt converts the response to an XML format.
BIt converts the response to a JavaScript object from JSON format.
CIt directly displays the response data on the page.
DIt validates the JSON structure.
Lời giải
Đáp án đúng: "It converts the response to a JavaScript object from JSON format.". Hàm fetch trả về một đối tượng Response mà phần thân còn là luồng dữ liệu thô; gọi response.json() đọc hết phần thân rồi phân tích chuỗi JSON thành giá trị JavaScript (đối tượng hoặc mảng), và vì việc đọc là bất đồng bộ nên nó trả về một Promise, thường viết const data = await response.json() rồi đưa data vào state. Phương án "It converts the response to an XML format." sai vì Fetch API không có hàm đổi sang XML; muốn đọc XML thì lấy response.text() rồi tự phân tích bằng DOMParser. Phương án "It directly displays the response data on the page." sai vì json() chỉ trả dữ liệu, hiển thị là việc của component khi render state. Phương án "It validates the JSON structure." chỉ đúng ở một hệ quả phụ: JSON hỏng thì Promise bị reject với lỗi cú pháp, nhưng mục đích của hàm là chuyển đổi dữ liệu chứ không phải kiểm tra cấu trúc.
Mở trang câu hỏi này →
4345How can you use a fragment in JSX?4 lựa chọn
ABy wrapping the JSX elements with <div> tags
BBy using the shorthand syntax <>...</> or <React.Fragment>...</React.Fragment>
CBy creating a separate component for each element
DBy using the fragment() function
Lời giải

Đáp án đúng: "By using the shorthand syntax <>...</> or <React.Fragment>...</React.Fragment> ". Một component chỉ được trả về một phần tử gốc, nên khi cần trả về nhiều phần tử anh em ta bọc chúng bằng Fragment; Fragment gom nhóm trong JSX nhưng không sinh thêm nút nào trong DOM. Cú pháp rút gọn là cặp thẻ rỗng, còn dạng đầy đủ React.Fragment cần dùng khi phải gắn key, chẳng hạn trong vòng map. "By wrapping the JSX elements with <div> tags" sai vì bọc bằng div cũng thoả yêu cầu một gốc nhưng thêm một nút DOM thừa, có thể phá bố cục như bảng hay flex, và đó chính là điều Fragment sinh ra để tránh. "By creating a separate component for each element" sai vì tách component không giải quyết việc gom nhiều phần tử về một gốc. "By using the fragment() function" sai vì React không có hàm fragment nào như vậy; Fragment là một component dùng dưới dạng thẻ.

Mở trang câu hỏi này →
AThe render() method defines the component's structure, while the commit() method handles side effects.
BThe render() method handles events, while the commit() method defines the component's structure.
CThe render() method is called before the component is mounted, while the commit() method is called after the component is mounted.
DThere is no commit() method in React.
Lời giải
Đáp án đúng: "There is no commit() method in React.". Theo tài liệu react.dev, render và commit là hai GIAI ĐOẠN trong cách React cập nhật màn hình: ở giai đoạn render, React gọi component để tính ra giao diện mới và so với lần trước; ở giai đoạn commit, React áp các thay đổi đó vào DOM, sau đó mới chạy effect. Commit là tên một giai đoạn nội bộ, React không cung cấp phương thức commit() nào để component viết ra hay gọi. "The render() method defines the component's structure, while the commit() method handles side effects." là phương án mà đề in chấm làm đáp án và cũng dễ bị chọn nhất: vế render đúng, và nếu hiểu commit là giai đoạn thì ý cập nhật DOM rồi chạy effect cũng gần đúng, nhưng câu này gọi commit là một phương thức như render(), mà phương thức đó không tồn tại, nên đáp án chốt là phát biểu phủ nhận. "The render() method handles events, while the commit() method defines the component's structure." sai vì render không xử lý sự kiện, và cũng dựa trên phương thức commit không có thật. "The render() method is called before the component is mounted, while the commit() method is called after the component is mounted." sai vì render được gọi cả ở lần mount lẫn mỗi lần cập nhật, và ở phần sau vẫn là phương thức commit không có thật.
Mở trang câu hỏi này →
ATo replace React Router
BTo add class-based components to Redux
CTo simplify Redux setup and reduce boilerplate code
DTo provide built-in CSS styling for Redux
Lời giải
Đáp án đúng: "To simplify Redux setup and reduce boilerplate code". Redux Toolkit (RTK) là bộ công cụ chính thức được khuyến nghị để viết Redux: configureStore dựng store kèm sẵn thunk và DevTools, createSlice sinh cùng lúc reducer và action creator từ một đối tượng, dùng Immer để viết lệnh trông như sửa trực tiếp state mà kết quả vẫn bất biến, createAsyncThunk lo các trạng thái khi gọi API; nhờ vậy giảm hẳn mã lặp (boilerplate) như hằng action type và khối switch-case. "To replace React Router" sai vì định tuyến là việc của React Router, RTK không liên quan. "To add class-based components to Redux" sai, RTK không thêm loại component nào, và cách dùng hiện nay là function component với useSelector, useDispatch. "To provide built-in CSS styling for Redux" sai vì Redux chỉ quản lý state, không có phần giao diện để định kiểu.
Mở trang câu hỏi này →
Afunction Greeting({ isAdmin }) { return ( <> <h1>Welcome!</h1> isAdmin && <p>You have administrative privileges.</p> </> ); }
Bfunction Greeting({ isAdmin }) { return ( <> <h1>Welcome!</h1> {isAdmin ? <p>You have administrative privileges.</p>} </> ); }
Cfunction Greeting({ isAdmin }) { return ( <> <h1>Welcome!</h1> {isAdmin && <p>You have administrative privileges.</p>} </> ); }
Dfunction Greeting({ isAdmin }) { return ( <> <h1>Welcome!</h1> {isAdmin ? <p>You have administrative privileges.</p>} </> ); }
Lời giải

Đáp án đúng: "function Greeting({ isAdmin }) {

Lời giải
return ( <> <h1>Welcome!</h1> {
  isAdmin && <p>You have administrative privileges.</p>
}

</> ); }". Trong JSX, cặp ngoặc nhọn mở chế độ biểu thức JavaScript; biểu thức isAdmin && thẻ p trả về thẻ p khi isAdmin là true, còn khi isAdmin là false nó trả về false và React không hiển thị gì, nên lời chào luôn hiện còn dòng thông báo quyền chỉ hiện với quản trị viên. Lưu ý nếu vế trái là số 0 thì React sẽ in ra số 0, nên vế trái nên là boolean. Phương án viết "</h1> isAdmin && <p> " thiếu ngoặc nhọn, nên chữ isAdmin && trở thành văn bản thường hiện thẳng ra màn hình, còn thẻ p luôn được render bất kể isAdmin. Cách viết "{isAdmin ? <p> " xuất hiện ở hai phương án có nội dung giống hệt nhau và đều sai cú pháp: toán tử ba ngôi bắt buộc có nhánh sau dấu hai chấm, thiếu nó trình biên dịch báo lỗi; muốn dùng ba ngôi thì phải thêm nhánh null, còn câu hỏi yêu cầu dùng toán tử &&.

Mở trang câu hỏi này →
Aconst [state, dispatch] = useContext(CountContext);
Bconst { state, dispatch } = CountContext;
Cconst { state, dispatch } = useContext(CountContext);
Dconst state = CountContext.state;
Lời giải
Đáp án đúng: "const { state, dispatch } = useContext(CountContext);". Mẫu thường gặp là component cha dùng useReducer rồi truyền một đối tượng gồm state và dispatch vào prop value của CountContext.Provider; component con gọi useContext(CountContext) để nhận chính đối tượng đó và phân rã lấy hai khoá state, dispatch. "const [state, dispatch] = useContext(CountContext);" dùng ngoặc vuông để phân rã mảng, chỉ đúng nếu value là mảng; với value là đối tượng, phân rã mảng sẽ ném lỗi vì đối tượng không lặp được. "const { state, dispatch } = CountContext;" phân rã thẳng đối tượng context do createContext tạo ra; đối tượng này chỉ có Provider và Consumer chứ không chứa state hay dispatch, nên cả hai ra undefined. "const state = CountContext.state;" cũng đọc thuộc tính trên đối tượng context nên ra undefined; giá trị hiện hành chỉ lấy được qua useContext hoặc Consumer.
Mở trang câu hỏi này →
AA component that does not use props.
BA component that does not manage its own state.
CA component that does not render any JSX.
DA component that does not handle events.
Lời giải
Đáp án đúng: "A component that does not manage its own state.". Stateless component (component không trạng thái) là component không giữ state riêng: nó chỉ nhận dữ liệu qua props và trả về giao diện tương ứng, cùng props thì luôn ra cùng kết quả, thường được gọi là presentational component; trước khi có hook, function component mặc định là stateless còn class component mới có this.state. Phương án "A component that does not use props." sai vì component không trạng thái thường dựa hoàn toàn vào props. Phương án "A component that does not render any JSX." sai vì component nào cũng trả về JSX hoặc null để mô tả giao diện, dù có state hay không. Phương án "A component that does not handle events." sai vì component không trạng thái vẫn gắn được sự kiện, ví dụ nhận hàm onClick từ cha qua props rồi gắn vào nút.
Mở trang câu hỏi này →
4351What will the following code output?4 lựa chọncó code
Đề bài
const arr = [1, 2, 3];
const [x, , z] = arr;
console.log(x, z);
A1, 3
B1, undefined
Cundefined, 3
D1, 2
Lời giải
Đáp án đúng: "1, 3". Đây là destructuring assignment (gán phân rã) mảng: các biến bên trái được gán theo vị trí phần tử của arr, và dấu phẩy để trống ở giữa nghĩa là bỏ qua phần tử ở vị trí đó. Lần theo mã: arr là mảng 1, 2, 3; vị trí đầu gán cho x nên x bằng 1, vị trí thứ hai bị bỏ qua nên giá trị 2 không gán cho biến nào, vị trí thứ ba gán cho z nên z bằng 3; console.log(x, z) in ra 1 và 3 (trên console hai giá trị cách nhau bằng dấu cách). "1, undefined" sai vì z không bị thiếu giá trị, mảng có đủ phần tử thứ ba. "undefined, 3" sai vì x nhận phần tử đầu tiên là 1, chỗ bỏ trống nằm sau x chứ không phải trước. "1, 2" sai vì nhầm rằng z nhận phần tử kế tiếp, trong khi dấu phẩy trống đã đẩy z sang vị trí thứ ba.
Mở trang câu hỏi này →
AA function that triggers actions in response to user interactions
BA component that manages the application's state
CA function that specifies how the application's state changes in response to actions
DA middleware that handles asynchronous operations in Redux
Lời giải
Đáp án đúng: "A function that specifies how the application's state changes in response to actions". Reducer là một hàm thuần nhận hai đối số là state hiện tại và action, rồi trả về state kế tiếp; nó không sửa state cũ, không gọi API hay sinh số ngẫu nhiên, nên với cùng đầu vào luôn ra cùng kết quả, và chỉ reducer mới quyết định state đổi ra sao khi một action được dispatch. "A function that triggers actions in response to user interactions" sai vì việc phát action là của hàm xử lý sự kiện gọi dispatch, kèm action creator tạo đối tượng action; reducer chỉ nhận action, không phát ra. "A component that manages the application's state" sai vì reducer không phải component React và không hiển thị gì; state được giữ trong store. "A middleware that handles asynchronous operations in Redux" sai vì thao tác bất đồng bộ do middleware như redux-thunk hay createAsyncThunk lo, chúng chạy trước khi action tới reducer; reducer phải đồng bộ.
Mở trang câu hỏi này →
Anull
Bundefined
CAn empty object {}
DAn empty array []
Lời giải
Đáp án đúng: "undefined". useSelector của React Redux gọi hàm selector với toàn bộ state của store và trả về đúng thứ selector trả ra, không tự thay bằng giá trị mặc định nào; nếu selector đọc một thuộc tính không tồn tại, ví dụ state.user.profile khi chưa có profile, JavaScript cho ra undefined nên useSelector cũng trả về undefined. "null" chỉ xuất hiện khi state thật sự lưu giá trị null, React Redux không đổi undefined thành null. "An empty object {}" sai vì useSelector không tạo đối tượng rỗng thay thế; muốn có giá trị dự phòng thì phải tự viết trong selector, chẳng hạn dùng toán tử ?? để thay giá trị thiếu. "An empty array []" cũng chỉ có khi initialState của slice khai báo mảng rỗng, không phải hành vi mặc định khi không tìm thấy giá trị.
Mở trang câu hỏi này →
ANetwork errors due to connectivity issues
BSyntax errors in the code
CLogical errors in data fetching
DHardware performance issues affecting data processing
Lời giải
Đáp án đúng gồm ba ý: "Network errors due to connectivity issues", "Syntax errors in the code" và "Logical errors in data fetching". Loader ở đây là đoạn mã tải dữ liệu trước khi hiển thị, như hàm loader của React Router hay logic fetch kèm trạng thái đang tải. Lỗi hay gặp nhất là lỗi mạng: mất kết nối hoặc server không phản hồi khiến fetch bị reject. Kế đến là lỗi cú pháp trong chính hàm loader, như thiếu ngoặc hay sai từ khoá, làm mã không biên dịch hoặc ném lỗi khi chạy. Cuối cùng là lỗi logic khi lấy dữ liệu: gọi sai endpoint, đọc nhầm params, quên trả dữ liệu hay quên kiểm response.ok nên component nhận dữ liệu sai. React Router chuyển các lỗi này tới errorElement, còn tự viết thì bắt bằng try/catch. "Hardware performance issues affecting data processing" không phải lỗi của việc cài đặt loader: hiệu năng phần cứng nằm ngoài mã React, chỉ làm chậm chứ không làm hỏng logic tải dữ liệu.
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 →
AIt makes the function execute immediately
BIt tells the function to pause until all variables are declared
CIt makes the function return a Promise
DIt prevents any asynchronous code from running
Lời giải
Đáp án đúng: "It makes the function return a Promise". Từ khóa async đánh dấu hàm bất đồng bộ: hàm đó luôn trả về một Promise, giá trị return được bọc thành Promise resolve với giá trị ấy, còn lỗi ném ra thành Promise reject; bên trong hàm được phép dùng await để tạm dừng chính hàm đó cho tới khi một Promise khác hoàn thành, trong khi phần còn lại của chương trình vẫn chạy tiếp. Phương án "It makes the function execute immediately" sai vì async không đổi thời điểm gọi hàm; hàm chỉ chạy khi được gọi, giống hàm thường. Phương án "It tells the function to pause until all variables are declared" là mô tả không có thật; tạm dừng chỉ xảy ra ở từng chỗ await để chờ Promise, không liên quan tới khai báo biến. Phương án "It prevents any asynchronous code from running" ngược hẳn, vì async sinh ra chính là để viết mã bất đồng bộ dễ đọc như mã tuần tự.
Mở trang câu hỏi này →
ATo manage back-end data
BTo provide pre-designed responsive layout components and styles for front-end development
CTo perform server-side scripting
DTo enable database management in web applications
Lời giải
Đáp án đúng: "To provide pre-designed responsive layout components and styles for front-end development". Bootstrap là framework CSS phía front-end: nó cung cấp hệ lưới 12 cột đáp ứng theo cỡ màn hình, bộ định kiểu sẵn cho chữ, nút, biểu mẫu, bảng, cùng các component như thanh điều hướng, modal, carousel, và lớp tiện ích về khoảng cách, màu sắc, giúp dựng giao diện đẹp và chạy tốt trên cả điện thoại lẫn máy tính mà không phải viết nhiều CSS. "To manage back-end data" sai vì Bootstrap chỉ làm việc với giao diện trong trình duyệt, không chạm đến dữ liệu phía máy chủ. "To perform server-side scripting" sai vì kịch bản phía máy chủ được viết bằng ngôn ngữ như Node.js, PHP hay Java, còn Bootstrap gồm CSS và một ít JavaScript chạy phía client. "To enable database management in web applications" sai vì quản trị cơ sở dữ liệu là việc của hệ quản trị cơ sở dữ liệu và tầng back-end.
Mở trang câu hỏi này →
AGET
BPOST
CPUT
DDELETE
Lời giải
Đáp án đúng: "GET". Theo chuẩn HTTP, GET là phương thức dùng để đọc, lấy tài nguyên từ máy chủ; nó được coi là an toàn (không làm thay đổi dữ liệu) và idempotent (gọi nhiều lần cho cùng kết quả), tham số thường nằm trên URL, và trình duyệt hay bộ đệm có thể lưu lại phản hồi. Trong React, fetch không ghi phương thức hoặc axios.get đều gửi GET. "POST" sai vì nó dùng để gửi dữ liệu lên máy chủ, thường là tạo bản ghi mới như đăng ký tài khoản, dữ liệu nằm trong thân request. "PUT" sai vì nó dùng để thay thế hoặc cập nhật toàn bộ một tài nguyên đã có tại một địa chỉ xác định. "DELETE" sai vì nó yêu cầu máy chủ xoá tài nguyên. Ba phương thức này có thể trả dữ liệu về trong phản hồi, nhưng mục đích chính của chúng là thay đổi dữ liệu, không phải lấy dữ liệu.
Mở trang câu hỏi này →
A<Suspense loading={<Loading />}><MyComponent /></Suspense>
B<Suspense fallback={<Loading />}><MyComponent /></Suspense>
C<Suspense wait={<Loading />}><MyComponent /></Suspense>
D<Suspense fallback={<Loading />} loading={<MyComponent />} />
Lời giải

Đáp án đúng: "<Suspense fallback={ <Loading /> }> <MyComponent /> </Suspense>". Suspense nhận đúng một prop tên fallback chứa phần tử hiển thị trong lúc một component con, như component tạo bằng lazy, đang tải; component cần chờ phải nằm BÊN TRONG Suspense dưới dạng con. "<Suspense loading={ <Loading /> }> <MyComponent /> </Suspense>" sai tên prop: Suspense không có prop loading nên không hiện giao diện chờ nào. "<Suspense wait={ <Loading /> }> <MyComponent /> </Suspense>" cũng sai tên prop, wait không tồn tại trên Suspense. "<Suspense fallback={ <Loading /> } loading={ <MyComponent /> } />" có fallback đúng nhưng nhét MyComponent vào một prop lạ thay vì làm con; Suspense tự đóng không có con nên MyComponent không bao giờ được render.

Mở trang câu hỏi này →
A<Route path="/user/userId/post/postId" component={UserPost} />
B<Route path="/user/:userId/:postId" component={UserPost} />
C<Route path="/user/:userId/post/:postId" component={UserPost} />
D<Route path="/user?userId/post?postId" component={UserPost} />
Lời giải

Đáp án đúng: "

Lời giải
<Route path="/user/:userId/post/:postId" component={
  UserPost
}
/>

". Trong React Router, mỗi đoạn đường dẫn bắt đầu bằng dấu hai chấm là một tham số động (URL parameter); mẫu này khớp URL như /user/7/post/42 và cho userId là 7, postId là 42, đọc ra bằng useParams (hoặc match.params ở bản cũ). Prop component là cú pháp React Router v5, ở v6 viết bằng prop element, nhưng cách khai báo tham số giống hệt. "

Lời giải
<Route path="/user/userId/post/postId" component={
  UserPost
}
/>

" thiếu dấu hai chấm nên userId và postId chỉ là chữ cố định, chỉ khớp đúng chuỗi đó. "

Lời giải
<Route path="/user/:userId/:postId" component={
  UserPost
}
/>

" cũng hợp lệ về cơ chế vì vẫn khai báo đúng hai tham số, chỉ bỏ đoạn post nên URL thành /user/7/42; đáp án chọn mẫu có đoạn post vì đường dẫn lồng tài nguyên như vậy rõ nghĩa hơn. "

Lời giải
<Route path="/user?userId/post?postId" component={
  UserPost
}
/>

" sai vì dấu chấm hỏi trong URL mở đầu query string, không khai báo tham số đường dẫn.

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