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ố 2

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
A<Child props={{ name: "John", age: 30 }} />
B<Child name="John" age={30} />
C<Child name="John" age="30" />
D<Child name="John" age=30 />
Lời giải

Đáp án đúng: "

Lời giải
<Child name="John" age={
  30
}
/>

". Mỗi prop là một thuộc tính riêng trên thẻ JSX, cách nhau bằng dấu cách; chuỗi đặt trong nháy kép, còn giá trị JavaScript khác như số, boolean hay object đặt trong ngoặc nhọn, nên Child nhận props.name là chuỗi John và props.age là số 30. "<Child name="John" age="30" /> " cũng truyền được hai prop nhưng age thành chuỗi ký tự chứ không phải số, nên phép cộng hay so sánh số trong Child dễ ra kết quả sai. "<Child name="John" age=30 /> " sai cú pháp JSX vì giá trị thuộc tính không phải chuỗi thì bắt buộc nằm trong ngoặc nhọn. "

Lời giải
<Child props={
  {
    name: "John", age: 30
  }
}
/>

" chỉ truyền một prop tên props chứa object, Child phải đọc props.props.name; muốn trải object thành nhiều prop thì dùng cú pháp spread với ba dấu chấm trong ngoặc nhọn.

Mở trang câu hỏi này →
Aconst [isActive, setIsActive] = useState(false); setIsActive(!isActive);
Bconst isActive = useState(false); isActive = !isActive;
Cconst isActive = false; setIsActive(!isActive);
Dconst [isActive] = useState(!false);
Lời giải
Đáp án đúng: "const [isActive, setIsActive] = useState(false); setIsActive(!isActive);". useState trả về một mảng hai phần tử, giá trị state hiện tại và hàm set để đổi nó, và destructuring mảng đặt tên cho cả hai. Gọi setIsActive(!isActive) báo React lưu giá trị mới rồi render lại component, lúc đó isActive mang giá trị đã đảo; khi đảo nhiều lần liên tiếp nên dùng dạng cập nhật theo giá trị trước setIsActive(prev => !prev). "const isActive = useState(false); isActive = !isActive;" sai hai lần: isActive lúc này là cả mảng chứ không phải boolean, và gán lại một hằng const sẽ ném TypeError; hơn nữa sửa biến trực tiếp không khiến React render lại. "const isActive = false; setIsActive(!isActive);" sai vì isActive chỉ là biến thường, còn setIsActive chưa từng được khai báo nên báo ReferenceError. "const [isActive] = useState(!false);" chỉ khởi tạo isActive bằng true và bỏ mất hàm set, nên không có cách nào đảo giá trị về sau.
Mở trang câu hỏi này →
AModal
BCheckbox
CButton
DCard
Lời giải
Đáp án đúng: "Modal". Modal của React-Bootstrap là hộp thoại nổi lên trên trang kèm lớp phủ nền, bật tắt bằng prop show và đóng qua onHide, nội dung tuỳ biến được nhờ các phần con Modal.Header, Modal.Title, Modal.Body, Modal.Footer, nên đúng là thành phần hiển thị popup dialog. "Checkbox" không phải component riêng của React-Bootstrap; ô đánh dấu được tạo bằng Form.Check với type checkbox, và nó là ô nhập chứ không phải hộp thoại. "Button" chỉ là nút bấm, thường dùng để mở Modal nhưng bản thân không phải hộp thoại. "Card" là hộp nội dung nằm trong luồng trang, không nổi lên che trang và không có cơ chế đóng mở như hộp thoại.
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 →
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 →
A<Route path="home" component={Home} />
B<Route path="/home" element={<Home />} />
C<Route path="/home" render={() => <Home />} />
D<Route component={Home} path="/home" />
Lời giải

Đáp án đúng: "<Route path="/home" element={ <Home /> } />". React Router v6 đổi cách khai báo tuyến: Route nhận prop element với giá trị là một phần tử React đã viết sẵn, tức <Home />, và các Route phải nằm trong Routes; nhờ truyền phần tử thay vì tham chiếu component, ta có thể truyền prop trực tiếp như

Lời giải
<Home user={
  user
}
/>

. "

Lời giải
<Route path="home" component={
  Home
}
/>

" sai vì prop component là cú pháp của React Router v5, đã bị bỏ ở v6 nên Route không hiển thị gì. "

Lời giải
<Route path="/home" render={
  () => <Home />

} />" sai vì prop render cũng thuộc v5, dùng để truyền hàm trả về phần tử, v6 thay hẳn bằng element. "

Lời giải
<Route component={
  Home
}
path="/home" />

" sai vì thứ tự prop không quan trọng trong JSX, vấn đề vẫn là prop component của v5 không còn được v6 hỗ trợ.

Mở trang câu hỏi này →
Aconst navigate = useRoute(); navigate('/home');
Bconst navigate = useHistory(); navigate('/home');
Cconst navigate = useNavigate(); navigate('/home');
Dconst navigate = useNavigation(); navigate('/home');
Lời giải
Đáp án đúng: "const navigate = useNavigate(); navigate('/home');". Trong React Router v6, hook useNavigate trả về một hàm điều hướng; gọi hàm đó với đường dẫn sẽ chuyển sang route tương ứng phía client mà không tải lại trang, thường dùng sau khi gửi biểu mẫu hay đăng nhập xong, và có thể truyền thêm tuỳ chọn replace hoặc số âm để quay lại. "const navigate = useRoute(); navigate('/home');" sai vì react-router-dom không có hook useRoute. "const navigate = useHistory(); navigate('/home');" sai vì useHistory là hook của v5, đã bị bỏ ở v6, và nó trả về object history nên phải gọi history.push chứ không gọi trực tiếp như một hàm. "const navigate = useNavigation(); navigate('/home');" sai vì useNavigation trong React Router v6.4 trở lên trả về trạng thái điều hướng hiện tại như idle hay loading để hiển thị chỉ báo tải, không phải hàm chuyển trang; tên này còn là hook của thư viện React Navigation trong React Native.
Mở trang câu hỏi này →
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 →
49Why might this code produce unexpected results?4 lựa chọncó code
Đề bài
function Counter() {
  const [count, setCount] = useState(0);
  const handleClick = () => {
    setCount(count + 1);
    setCount(count + 1);
  };
  return <button onClick={handleClick}>{count}</button>;
}
ABecause setCount is called twice, it resets state
BBecause setCount merges the updates automatically
CBoth setCount(count + 1) calls use the same snapshot of count
DIt's invalid to call setCount twice
Lời giải
Đáp án đúng: "Both setCount(count + 1) calls use the same snapshot of count". Mỗi lần render, component Counter nhận một giá trị count cố định như ảnh chụp (snapshot); hàm handleClick được tạo trong lần render đó nên đóng gói (closure) đúng giá trị ấy. Khi count đang là 0, cả hai lời gọi đều tính 0 + 1 và cùng xếp vào hàng đợi yêu cầu đặt state thành 1, nên sau lần render kế tiếp nút hiện 1 chứ không phải 2 như người viết mong đợi; muốn cộng hai lần phải dùng hàm cập nhật dạng setCount(c => c + 1) để mỗi lần nhận giá trị mới nhất. "Because setCount is called twice, it resets state" sai vì không có gì bị đặt lại về 0, state chỉ lên 1. "Because setCount merges the updates automatically" sai vì React gom (batch) nhiều lần cập nhật vào một lần render nhưng không cộng dồn giá trị; trộn object là hành vi của this.setState trong class component. "It's invalid to call setCount twice" sai vì gọi hàm đặt state nhiều lần trong một sự kiện là hoàn toàn hợp lệ.
Mở trang câu hỏi này →
ATo handle errors during component rendering.
BTo define an alternative component to render after the lazy component has loaded
CTo display a lightweight placeholder UI, such as a loading spinner, or an alternate UI to render in place of the actual UI if it has not finished loading
DTo determine when to trigger a re-render of the lazy-loaded component.
Lời giải
Đáp án đúng: "To display a lightweight placeholder UI, such as a loading spinner, or an alternate UI to render in place of the actual UI if it has not finished loading". Suspense bọc quanh phần giao diện có thể chưa sẵn sàng, ví dụ component tải bằng React.lazy hay dữ liệu đang chờ; trong lúc component con còn đang tải, React hiển thị thứ được truyền vào prop fallback, thường là spinner hoặc khung xương nhẹ, rồi tự thay bằng giao diện thật khi tải xong. Phương án "To handle errors during component rendering." là việc của Error Boundary, Suspense không bắt lỗi. Phương án "To define an alternative component to render after the lazy component has loaded" đảo ngược thời điểm: fallback hiện trước và trong khi tải, còn sau khi tải xong thì component thật mới hiện. Phương án "To determine when to trigger a re-render of the lazy-loaded component." sai vì fallback chỉ là phần tử hiển thị, không điều khiển lúc nào render lại; việc đó do React quyết định khi phần đang chờ tải xong.
Mở trang câu hỏi này →