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 cuối kỳ số 3

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 2/3 — câu 21–40.

Danh sách câu hỏi

40/50 câuCòn 10
A<Child prop="name" value="John" />
B<Child propName="name" propValue="John" />
C<Child name="John" />
D<Child data="John" />
Lời giải

Đáp án đúng: "<Child name="John" /> ". Props được truyền giống thuộc tính HTML: tên thuộc tính trong JSX chính là tên khoá trong object props mà component con nhận, nên viết name bằng chuỗi John thì bên trong Child đọc được props.name có giá trị John, hoặc phân rã tham số thành name. "<Child prop="name" value="John" /> " sai vì nó tạo hai prop có tên prop và value, con sẽ nhận props.prop là chuỗi name và props.value là John chứ không có prop name nào. "<Child propName="name" propValue="John" /> " sai vì React không có quy ước tách tên và giá trị thành hai thuộc tính như vậy; con chỉ nhận hai prop propName và propValue. "<Child data="John" /> " sai vì giá trị John được gửi dưới tên data, nên trong con phải đọc props.data, còn props.name vẫn là undefined.

Mở trang câu hỏi này →
Afunction.
Bclass.
Cconst.
Dcomponent.
Lời giải
Đáp án đúng: "class.". Class component được viết bằng từ khóa class của ES6, kế thừa React.Component (ví dụ class Welcome extends React.Component) và bắt buộc có phương thức render trả về JSX; state nằm ở this.state, cập nhật bằng this.setState, và có các phương thức vòng đời như componentDidMount. Phương án "function." là cách viết function component, loại component dùng hook thay cho class. Phương án "const." chỉ là từ khóa khai báo hằng; nó hay đi với arrow function để tạo function component, không tạo ra class component. Phương án "component." không phải từ khóa của JavaScript; React.Component là lớp cha để kế thừa chứ không có cú pháp khai báo component bằng chữ component.
Mở trang câu hỏi này →
AuseState is used for managing simple state, while useReducer is used for complex state and state transitions.
BuseState is a built-in Hook, while useReducer is a custom Hook.
CuseState is used for class components, while useReducer is used for functional components.
DuseState is for local component state, while useReducer is for global application state.
Lời giải

Đáp án đúng: "useState is used for managing simple state, while useReducer is used for complex state and state transitions.". useState hợp với state đơn giản và độc lập như một số, một chuỗi hay một cờ bật tắt; useReducer gom mọi cách chuyển trạng thái vào một hàm reducer(state, action), hợp khi state là đối tượng nhiều trường liên quan hoặc giá trị kế tiếp phụ thuộc giá trị trước theo nhiều loại hành động. "useState is a built-in Hook, while useReducer is a custom Hook." sai vì cả hai đều là hook có sẵn của React, import trực tiếp từ gói react. "useState is used for class components, while useReducer is used for functional components." sai vì không hook nào dùng được trong class component; cả hai chỉ dành cho function component. "useState is for local component state, while useReducer is for global application state." nhầm: cả hai đều tạo state cục bộ của component; muốn chia sẻ cho toàn ứng dụng thì phải kết hợp useReducer với Context hoặc dùng Redux.

Mở trang câu hỏi này →
ATo avoid using state in functional components
BTo share reusable logic between components
CTo handle side-effects like fetching data
DTo directly manipulate DOM elements
Lời giải
Đáp án đúng: "To share reusable logic between components". Custom hook là một hàm có tên bắt đầu bằng use, bên trong gọi các hook khác như useState, useEffect, để đóng gói một đoạn logic có state, ví dụ useFetch, useLocalStorage hay useWindowSize, rồi dùng lại ở nhiều component; mỗi component gọi nó có state riêng, tức là chia sẻ logic chứ không chia sẻ dữ liệu. "To avoid using state in functional components" sai vì custom hook thường chính là nơi chứa state. "To handle side-effects like fetching data" là việc custom hook có thể bọc lại, nhưng chính useEffect mới xử lý side effect; lý do để tạo custom hook là tái sử dụng logic đó. "To directly manipulate DOM elements" sai vì thao tác DOM trực tiếp đi qua useRef và nên hạn chế, không phải mục đích điển hình của custom hook.
Mở trang câu hỏi này →
Aconst value = MyContext.useContext();
Bconst value = useContext(MyContext);
Cconst value = useContextProvider(MyContext);
Dconst value = MyContext.useContextProvider();
Lời giải

Đáp án đúng: "const value = useContext(MyContext);". useContext là hook nhập từ react, nhận đối tượng context đã tạo bằng createContext và trả về giá trị của Provider gần nhất phía trên trong cây; nếu không có Provider nào thì trả về giá trị mặc định truyền cho createContext, và component sẽ render lại khi giá trị đó đổi. "const value = MyContext.useContext(); " sai vì đối tượng context chỉ có các thuộc tính như Provider và Consumer, không có phương thức useContext. "const value = useContextProvider(MyContext);" sai vì React không có hook tên useContextProvider; Provider là component dùng để cung cấp giá trị chứ không phải hook để đọc. "const value = MyContext.useContextProvider(); " sai vì cả phương thức lẫn tên gọi đó đều không tồn tại trên đối tượng context.

Mở trang câu hỏi này →
Agit start
Bgit init
Cgit new
Dgit create
Lời giải
Đáp án đúng: "git init". Lệnh git init chạy trong thư mục dự án sẽ tạo thư mục ẩn .git chứa toàn bộ dữ liệu của kho (lịch sử commit, nhánh, cấu hình), biến thư mục đang có thành một kho Git mà không đụng tới các tệp sẵn có; sau đó mới dùng git add và git commit để ghi lần commit đầu tiên. Lệnh này cũng an toàn khi chạy lại trên kho đã có. "git start" sai vì Git không có lệnh con start, gõ vào sẽ báo không phải lệnh git. "git new" sai vì cũng không tồn tại; muốn tạo nhánh mới thì dùng git branch hoặc git switch -c. "git create" sai vì Git không có lệnh này; muốn lấy một kho có sẵn về máy thì dùng git clone, còn khởi tạo kho mới thì dùng init.
Mở trang câu hỏi này →
ATo handle back-end data storage
BTo provide ready-to-use UI components for building web interfaces
CTo manage the database
DTo create server-side logic
Lời giải
Đáp án đúng: "To provide ready-to-use UI components for building web interfaces". Framework giao diện web phía front-end như Bootstrap, React-Bootstrap hay Material UI gom sẵn các thành phần giao diện đã được định kiểu và thường đáp ứng (responsive), như nút, thanh điều hướng, biểu mẫu, bảng, hộp thoại, cùng hệ lưới bố cục, để lập trình viên lắp ráp giao diện nhanh và nhất quán thay vì tự viết CSS từ đầu. "To handle back-end data storage" sai vì lưu trữ dữ liệu là việc của máy chủ và cơ sở dữ liệu, nằm ngoài phạm vi framework giao diện. "To manage the database" sai vì quản trị cơ sở dữ liệu thuộc về hệ quản trị như PostgreSQL hay MySQL, framework giao diện không làm việc này. "To create server-side logic" sai vì logic phía máy chủ như xác thực hay xử lý nghiệp vụ được viết bằng framework back-end như Express, còn framework giao diện chỉ phục vụ phần người dùng nhìn thấy trong trình duyệt.
Mở trang câu hỏi này →
AReact
BAngular
CDjango
DVue.js
Lời giải
Đáp án đúng: "Django". Django là framework web phía máy chủ (back-end) viết bằng Python, lo định tuyến, ORM truy cập cơ sở dữ liệu và sinh HTML trên server, nên không thuộc nhóm framework front-end chạy trong trình duyệt. Câu hỏi dạng phủ định nên phải chọn cái KHÔNG phải front-end; những cái tên đều là công cụ front-end thật thì không được chọn. "React" là thư viện JavaScript của Meta để xây giao diện bằng component, thường được xếp chung nhóm framework front-end phổ biến. "Angular" là framework front-end đầy đủ của Google viết bằng TypeScript, có sẵn router, form và dependency injection. "Vue.js" là framework front-end tăng tiến (progressive), dùng template và hệ phản ứng (reactivity) để tự cập nhật giao diện khi dữ liệu đổi.
Mở trang câu hỏi này →
AThe render method is used to compile JSX into JavaScript.
BThe render method is used to convert JSX into HTML and render it to the DOM.
CThe render method is used to manage state in React components.
DThe render method is used to handle routing in React applications.
Lời giải
Đáp án đúng: "The render method is used to convert JSX into HTML and render it to the DOM.". Nói chính xác, JSX được trình biên dịch như Babel chuyển thành lời gọi tạo React element (đối tượng mô tả giao diện), rồi phương thức render, như root.render của react-dom hay render của class component, đưa các element đó thành phần tử thật trên DOM của trình duyệt; vì vậy phát biểu chuyển JSX thành HTML và đưa ra DOM là cách diễn đạt gần đúng nhất về vai trò của render. Phương án "The render method is used to compile JSX into JavaScript." nhầm render với bước biên dịch: việc dịch JSX sang JavaScript do Babel làm trước khi chạy, không phải lúc render. Phương án "The render method is used to manage state in React components." sai vì state do useState hoặc this.state cùng this.setState quản lý; render chỉ đọc state để mô tả giao diện. Phương án "The render method is used to handle routing in React applications." sai vì định tuyến là việc của thư viện như React Router.
Mở trang câu hỏi này →
30What is JSX?4 lựa chọn
AA JavaScript library for building user interfaces
BA syntax extension for JavaScript that allows you to write HTML-like code
CA React component that renders HTML elements
DA JavaScript framework for building web applications
Lời giải
Đáp án đúng: "A syntax extension for JavaScript that allows you to write HTML-like code". JSX (JavaScript XML) là phần mở rộng cú pháp cho JavaScript, cho phép viết đoạn trông giống HTML ngay trong mã; trình biên dịch như Babel chuyển mỗi thẻ JSX thành lời gọi React.createElement hoặc hàm jsx, nên trình duyệt chỉ thấy JavaScript thường. "A JavaScript library for building user interfaces" là định nghĩa của chính React, một thư viện xây dựng giao diện người dùng. "A React component that renders HTML elements" sai vì JSX không phải component; component là hàm hoặc lớp trả về JSX. "A JavaScript framework for building web applications" không đúng vì JSX chỉ là cú pháp, không phải framework; ví dụ framework cho ứng dụng web là Angular hay Next.js.
Mở trang câu hỏi này →
Đề bài
const person = { name: 'John', age: 30 };
const { _______ } = person;
console.log(name, age);
Aname, age
Bprop: name, prop: age
Ckey: name, value: age
Dextract: name, extract: age
Lời giải
Đáp án đúng: "name, age". Destructuring assignment với object lấy thuộc tính theo tên khoá: viết const { name, age } = person tạo hai biến name và age nhận giá trị person.name và person.age, nên console.log in ra John 30. Thứ tự trong ngoặc không quan trọng vì khớp theo tên; muốn đặt tên biến khác thì viết khoá, dấu hai chấm rồi tên mới, ví dụ name: fullName. "prop: name, prop: age" vẫn đúng cú pháp nhưng nghĩa là lấy thuộc tính prop của person gán cho cả biến name lẫn age, mà person không có khoá prop nên cả hai thành undefined. "key: name, value: age" tương tự đọc person.key và person.value, đều không tồn tại nên in undefined undefined. "extract: name, extract: age" cũng chỉ đọc khoá extract không có trong person; ES6 không có từ khoá extract nào cho destructuring.
Mở trang câu hỏi này →
A<Container>
B<Form>
C<Card>
D<Alert>
Lời giải

Đáp án đúng: "<Card> ". Trong React-Bootstrap, Card là hộp nội dung có viền, gồm các phần con như Card.Img cho ảnh, Card.Body làm thân, Card.Title cho tiêu đề và Card.Text cho đoạn văn, nên rất hợp để gom tiêu đề, nội dung và hình ảnh của một mục thành một khối, ví dụ thẻ sản phẩm hay thẻ bài viết. "<Container> " là khung bố cục ngoài cùng của hệ lưới, canh lề và giới hạn bề ngang trang, không mang sẵn cấu trúc tiêu đề, thân, ảnh. "<Form> " dùng để dựng biểu mẫu nhập liệu cùng Form.Group, Form.Control. "<Alert> " hiển thị thông báo phản hồi ngắn như thành công, cảnh báo, lỗi, không phải hộp trình bày nội dung theo nhóm.

Mở trang câu hỏi này →
33Why use React-Bootstrap?4 lựa chọn
AIt easier to manage the state as updates are made using React’s state.
BIt is faster and more efficient than other UI libraries.
CIt is compatible with all browsers and devices.
DIt is developed by Facebook and has a large community support.
Lời giải
Đáp án đúng: "It easier to manage the state as updates are made using React’s state.". React-Bootstrap viết lại các component của Bootstrap thành component React thuần, không dùng jQuery hay mã JavaScript của Bootstrap thao tác DOM trực tiếp; việc mở Modal, thu gọn Collapse hay chọn Tab được điều khiển bằng prop như show và một biến state của React, nên trạng thái giao diện nằm cùng chỗ với state của ứng dụng và không bị hai bên giành nhau sửa DOM. "It is faster and more efficient than other UI libraries." sai vì không có bảo đảm nào như vậy, hiệu năng tuỳ cách dùng chứ không phải lý do để chọn thư viện này. "It is compatible with all browsers and devices." sai vì Bootstrap chỉ hỗ trợ các trình duyệt hiện đại, không phải mọi trình duyệt cũ. "It is developed by Facebook and has a large community support." sai vì React do Facebook (nay là Meta) phát triển, còn Bootstrap ra đời ở Twitter và React-Bootstrap do cộng đồng duy trì.
Mở trang câu hỏi này →
Aimport React from 'react'; import Button from 'react-bootstrap/Button'; function Demo() { return ( <Button variant="primary"> ); } export default Demo;
Bimport React from 'react'; import Button from 'react-bootstrap/Button'; function Demo() { return ( <button variant="primary"> Primary Button</button> ); } export default Demo;
Cimport React from 'react'; import Button from 'react-bootstrap/Button'; function Demo() { return ( <Button variant="primary">Primary Button</Button> ); } export default Demo;
Dimport React from 'react'; import Button from 'react-bootstrap/Button'; function Demo() { return ( <button variant="primary"/> ); } export default Demo;
Lời giải

Đáp án đúng: "import React from 'react'; import Button from 'react-bootstrap/Button'; function Demo() {

Lời giải
return ( <Button variant="primary">Primary Button</Button> );

} export default Demo;". Component Button phải được import từ react-bootstrap/Button rồi dùng đúng tên viết hoa Button, có thẻ mở và thẻ đóng bao lấy nội dung; khi đó prop variant="primary" được React-Bootstrap đổi thành lớp btn btn-primary và chữ Primary Button hiện trên nút màu xanh. Phương án chứa "<Button variant="primary">);" sai cú pháp JSX: thẻ mở Button không có thẻ đóng mà cũng không tự đóng, nên trình biên dịch báo lỗi ngay. Phương án chứa "

Lời giải
<button variant="primary"> Primary Button</button>

" dùng thẻ button HTML viết thường chứ không phải component đã import, nên variant chỉ là thuộc tính lạ và nút hiện ra không có kiểu Bootstrap. Phương án chứa "<button variant="primary"/> " vừa là thẻ HTML thường vừa tự đóng, không có chữ bên trong, nên chỉ ra một nút trống không kiểu dáng.

Mở trang câu hỏi này →
AIt immediately changes the state variable you already have.
BIt only changes the state after the component unmounts
CSetting it does not change the state variable you already have, but instead triggers a re-render
DIt directly modifies the DOM without triggering a re-render
Lời giải
Đáp án đúng: "Setting it does not change the state variable you already have, but instead triggers a re-render". Theo mô hình state as a snapshot (state là ảnh chụp) trong tài liệu React, mỗi lần render, component nhận giá trị state cố định của lần render đó; gọi hàm đặt state không sửa biến đang có mà yêu cầu React render lại, và chỉ ở lần render kế tiếp useState mới trả về giá trị mới, nên nếu ghi log biến ngay sau khi đặt state thì vẫn thấy giá trị cũ. "It immediately changes the state variable you already have." sai vì biến trong lần render hiện tại là hằng của ảnh chụp đó, không bị đổi ngay. "It only changes the state after the component unmounts" sai vì sau khi component bị gỡ thì không còn render nữa; state mới có hiệu lực ngay ở lần render tiếp theo khi component vẫn đang hiển thị. "It directly modifies the DOM without triggering a re-render" sai vì đặt state không chạm trực tiếp vào DOM; React render lại, so sánh qua Virtual DOM rồi mới cập nhật DOM thật.
Mở trang câu hỏi này →
AInitializing state, updating props, and re-rendering.
BTriggering a render, rendering the component, and committing to the DOM.
CCreating JSX, adding styles, and responding to events
DDefining a component, mounting, and unmounting.
Lời giải
Đáp án đúng: "Triggering a render, rendering the component, and committing to the DOM.". Tài liệu React mô tả quá trình đưa giao diện lên màn hình gồm ba bước: kích hoạt (trigger) một lần render, xảy ra lần đầu khi gọi root.render hoặc khi state của component hay của tổ tiên được cập nhật; render, tức React gọi hàm component để tính xem giao diện nên trông thế nào; và commit, tức React áp các thay đổi vào DOM, lần đầu thì gắn toàn bộ nút bằng appendChild, các lần sau chỉ sửa chỗ khác biệt. Sau commit trình duyệt mới vẽ lại màn hình. Phương án "Initializing state, updating props, and re-rendering." chỉ liệt kê vài sự kiện trong vòng đời, không phải ba bước của quy trình. Phương án "Creating JSX, adding styles, and responding to events" là các việc lập trình viên làm khi viết component. Phương án "Defining a component, mounting, and unmounting." trộn việc định nghĩa component với hai mốc vòng đời gắn và gỡ, không nói gì tới render và commit.
Mở trang câu hỏi này →
AUsing the bind() method.
BUsing arrow functions.
CUsing the addEventListener() method.
DUsing the this keyword.
Lời giải
Đáp án đúng gồm ba ý: "Using the bind() method.", "Using arrow functions." và "Using the this keyword.". Muốn truyền thêm tham số cho hàm xử lý sự kiện (event handler), React có hai cách thật: bọc bằng arrow function (hàm mũi tên) như onClick={() => handleDelete(id)}, hoặc dùng bind để tạo một hàm mới có sẵn đối số, ví dụ this.handleDelete.bind(this, id), khi đó đối tượng event được nối vào sau cùng. Cần nói thẳng chỗ dễ tranh cãi: "Using the this keyword." tự nó không truyền được tham số, nó chỉ đúng theo nghĩa đi kèm bind(this, arg) trong class component, nơi this trỏ tới thể hiện component và là đối số đầu tiên của bind; vì gắn liền với cách dùng bind nên ý này được tính là đúng. Ngược lại "Using the addEventListener() method." là API DOM thuần, gắn trình nghe trực tiếp lên phần tử thật và đi vòng qua hệ thống sự kiện của React, nên không phải cách truyền tham số cho event handler trong React.
Mở trang câu hỏi này →
ATo display static text content
BTo provide a complex form validation mechanism
CTo extend the Collapse plugin for toggling visibility of content sections
DTo manage application-wide routing
Lời giải
Đáp án đúng: "To extend the Collapse plugin for toggling visibility of content sections". Accordion trong Bootstrap được dựng trên plugin Collapse: mỗi mục có một nút tiêu đề, bấm vào thì phần thân mở ra hoặc thu lại, và khi các mục gắn data-bs-parent vào cùng một khung thì mở mục này sẽ tự đóng mục khác, giúp gom nhiều khối nội dung vào ít chỗ. "To display static text content" sai vì Accordion là thành phần tương tác ẩn hiện nội dung, không phải để hiển thị văn bản tĩnh. "To provide a complex form validation mechanism" nhầm sang kiểm tra form, việc mà Bootstrap làm bằng lớp was-validated, is-invalid và invalid-feedback. "To manage application-wide routing" không liên quan, vì điều hướng trang trong ứng dụng là việc của thư viện định tuyến như React Router.
Mở trang câu hỏi này →
39What would happen if you didn’t include the4 lựa chọncó code
Đề bài
class="form-control" in your <input> element?
AThe input would not be submitted with the form
BThe input would fail client-side validation
CThe input field would revert to the browser's default styles
DThe input field would become non-responsive
Lời giải
Đáp án đúng: "The input field would revert to the browser's default styles". form-control là lớp CSS của Bootstrap, chỉ lo phần trình bày: cho ô nhập rộng 100%, có đệm, viền bo góc, cỡ chữ đồng bộ và viền sáng khi focus; trong JSX thuộc tính này viết là className. Bỏ lớp đi thì thẻ input vẫn hoạt động y nguyên, chỉ mang kiểu mặc định của trình duyệt. "The input would not be submitted with the form" sai vì việc gửi theo form phụ thuộc thuộc tính name và việc nằm trong thẻ form, không phụ thuộc lớp CSS. "The input would fail client-side validation" sai vì kiểm tra hợp lệ phía client dựa trên các thuộc tính như required, type, pattern. "The input field would become non-responsive" sai vì ô vẫn nhận nhập liệu bình thường, nó chỉ không còn tự giãn hết chiều rộng như khi có form-control.
Mở trang câu hỏi này →
ABy using the <modal> HTML element.
BBy applying the .modal class to the container element.
CBy using the .modal class along with the data-bs-toggle="modal" attribute.
DBy using JavaScript to dynamically create and show modal elements.
Lời giải

Đáp án đúng: "By using the .modal class along with the data-bs-toggle="modal" attribute.". Modal trong Bootstrap 5 là một khối div mang lớp .modal, bên trong có .modal-dialog, .modal-content, .modal-header, .modal-body, và được mở bằng plugin JavaScript có sẵn: nút kích hoạt mang thuộc tính data-bs-toggle với giá trị modal cùng data-bs-target trỏ tới id của modal, Bootstrap tự gắn sự kiện, hiện lớp phủ nền và quản lý tiêu điểm. "By using the <modal> HTML element." sai vì HTML không có thẻ modal; thẻ gốc gần nhất là dialog nhưng Bootstrap không dựa vào nó. "By applying the .modal class to the container element." chưa đủ, chỉ có lớp mà không có thuộc tính kích hoạt hay lời gọi JavaScript thì modal vẫn ẩn mãi. "By using JavaScript to dynamically create and show modal elements." là cách tự dựng tay; Bootstrap cho mở modal bằng lời gọi bootstrap.Modal rồi show, nhưng cách tạo modal tiêu chuẩn vẫn là cấu trúc .modal kèm data-bs-toggle.

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