Câu hỏi: MMA301 Phát triển ứng dụng di động đa nền tảng – 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 Multiplatform Mobile App Development - Phát triển ứng dụng di động đa nền tảng, 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
41Evaluate the best navigator for an app with settings, profile, and help center accessible from any screen.4 lựa chọn
AStack Navigator
BBottom Tab Navigator
CDrawer Navigator
DInline Navigator
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Drawer Navigator". Cài đặt, hồ sơ và trung tâm trợ giúp là những khu vực toàn cục, ít dùng nhưng phải với tới được từ bất kỳ màn hình nào; Drawer Navigator đặt chúng trong một menu trượt từ cạnh màn hình, luôn mở được bằng thao tác vuốt hoặc nút menu mà không chiếm chỗ cố định. "Bottom Tab Navigator" hợp với vài khu vực chính dùng thường xuyên, thanh tab chiếm chỗ cố định ở đáy và không hợp cho các mục phụ như trợ giúp. "Stack Navigator" chỉ quản lý chuỗi màn hình đi tới và quay lại, không cho truy cập trực tiếp từ mọi nơi. "Inline Navigator" không phải navigator có trong React Navigation.
42Which prop in FlatList is used to specify the function that renders each item in the list?4 lựa chọnDễ
A
renderItemB
renderRowC
itemRenderD
dataRenderLời giải
Mở trang câu hỏi này →Đáp án đúng: "renderItem". renderItem là prop bắt buộc của FlatList, nhận một hàm được gọi cho từng phần tử với đối tượng gồm item, index và separators, rồi trả về JSX hiển thị cho phần tử đó, ví dụ trả về một Text chứa item.title. FlatList chỉ gọi hàm này cho những phần tử gần vùng nhìn thấy để tiết kiệm bộ nhớ. "renderRow" sai vì đây là prop của ListView cũ, component đã bị loại khỏi React Native và thay bằng FlatList. "itemRender" sai vì FlatList không có prop tên như vậy. "dataRender" sai vì đây không phải prop của FlatList; dữ liệu truyền qua data, còn cách vẽ từng phần tử truyền qua renderItem.
43Which of the following is the correct way to use onChangeText and setText together in a TextInput component?4 lựa chọnDễ75% trả lời đúng
AonChangeText={text => setText(text)}
BonChangeText=text => setText(text)
ConChangeText={text => setTextValue(text)}
DonChangeText={text = setText(text)}
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "onChangeText={text => setText(text)}". onChangeText của TextInput gọi hàm được truyền vào với chuỗi nội dung mới mỗi lần người dùng gõ; hàm mũi tên nhận text rồi gọi setText(text) để cập nhật state, giá trị này thường được gán lại vào prop value để TextInput thành controlled. Trong JSX, biểu thức JavaScript làm giá trị prop phải nằm trong cặp ngoặc nhọn. "onChangeText=text => setText(text)" thiếu ngoặc nhọn nên là cú pháp JSX không hợp lệ, Babel báo lỗi. "onChangeText={text => setTextValue(text)}" đúng cú pháp nhưng gọi setTextValue, khác với setter setText đang đi cùng state, nên lỗi không tìm thấy hàm nếu chưa khai báo. "onChangeText={text = setText(text)}" dùng dấu gán thay cho mũi tên, thành phép gán chạy ngay lúc render chứ không phải hàm xử lý.
AIt uses more memory
BIt reduces I/O overhead
CIt slows down access
DIt requires extra permissions
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It reduces I/O overhead". multiGet của AsyncStorage nhận một mảng khoá và trả về các cặp khoá–giá trị trong một lần gọi, nên chỉ qua tầng native và truy cập kho lưu trữ một lần thay vì lặp lại cho từng getItem; chi phí vào–ra (I/O overhead) và số lần chờ bất đồng bộ đều giảm. "It uses more memory" sai vì gom lệnh không làm tốn thêm bộ nhớ đáng kể, lượng dữ liệu đọc ra vẫn như cũ. "It slows down access" ngược với thực tế, một lời gọi gom nhanh hơn nhiều lời gọi rời. "It requires extra permissions" sai vì AsyncStorage dùng vùng lưu trữ riêng của ứng dụng, getItem hay multiGet đều không cần cấp quyền nào.
ASequential setItem calls
BmultiSet
CbatchSave
DAsyncStorage.saveAll()
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "multiSet". AsyncStorage.multiSet nhận một mảng các cặp khoá và giá trị rồi ghi tất cả trong một lời gọi, giảm số lần đi qua cầu nối giữa JavaScript và native cũng như số thao tác ghi xuống bộ nhớ, nên nhanh hơn khi cần lưu nhiều mục cùng lúc; tương tự có multiGet và multiRemove cho đọc và xoá hàng loạt. "Sequential setItem calls" vẫn đúng chức năng nhưng mỗi lần ghi một mục là một lời gọi bất đồng bộ riêng, tốn thời gian hơn. "batchSave" không phải phương thức của AsyncStorage, chỉ là tên đoán. "AsyncStorage.saveAll()" cũng không tồn tại trong API; tên đúng cho việc ghi hàng loạt là multiSet.
A
CameraRollB
GeolocationC
AsyncStorageD
NetInfoLời giải
Mở trang câu hỏi này →Đáp án đúng: "Geolocation". Geolocation API cho phép lấy vị trí thiết bị qua getCurrentPosition (lấy một lần) và watchPosition (theo dõi liên tục), trả về vĩ độ, kinh độ và độ chính xác; nay nó được tách ra gói cộng đồng @react-native-community/geolocation và cần xin quyền vị trí trên Android lẫn iOS. "CameraRoll" truy cập thư viện ảnh và video trên máy. "AsyncStorage" lưu dữ liệu khoá–giá trị bền vững, không biết gì về vị trí. "NetInfo" cho biết trạng thái kết nối mạng như Wi-Fi hay di động và có mạng hay không, không cung cấp toạ độ.
47Evaluate the risk of not using StyleSheet.compose() for combining multiple style objects.4 lựa chọn
AIncreased reusability
BManual merging errors
CImproved performance
DBetter type checking
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Manual merging errors". StyleSheet.compose nhận hai style và gộp theo đúng quy tắc của React Native: khi cả hai đều có thì trả về mảng hai style để style sau đè style trước, khi một bên rỗng thì trả nguyên bên kia, giữ được tham chiếu tới style đã tạo bằng StyleSheet.create. Nếu không dùng nó mà tự gộp bằng toán tử trải đối tượng hay Object.assign, lập trình viên dễ sai thứ tự ưu tiên, làm mất thuộc tính hoặc tạo đối tượng mới mỗi lần render. "Increased reusability" sai vì đó là lợi ích, không phải rủi ro. "Improved performance" sai vì đây cũng là lợi ích, và gộp tay mỗi lần render thường làm hiệu năng kém đi chứ không tốt hơn. "Better type checking" sai vì đây là lợi ích chứ không phải rủi ro, và gộp tay không giúp kiểm tra kiểu tốt hơn.
48Which prop of the FlatList component is used to specify the layout direction of the list items?4 lựa chọnTrung bình67% trả lời đúng
Adirection
Blayout
Corientation
Dhorizontal
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "horizontal". FlatList kế thừa prop của ScrollView, nên đặt horizontal bằng true thì các mục được xếp thành một hàng ngang và danh sách cuộn trái phải, thường dùng cho băng chuyền thẻ hay danh mục; mặc định là danh sách dọc. "direction" không phải prop của FlatList mà là thuộc tính style ltr/rtl cho hướng chữ và bố cục. "layout" không tồn tại trong API FlatList; khai báo kích thước cố định từng mục làm bằng getItemLayout, một prop khác hẳn. "orientation" không phải prop của FlatList, React Native không đọc tới nó và danh sách vẫn dọc.
AWhen the application needs to store more than 10,000 records.
BWhen the application becomes more complex (e.g., multiple components need to access and modify the same data).
CWhen you want to reduce the load on the backend API.
DWhen you need to synchronize data between multiple devices.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "When the application becomes more complex (e.g., multiple components need to access and modify the same data).". Biến JavaScript thường không khiến giao diện render lại khi đổi giá trị và khó chia sẻ an toàn giữa nhiều component; khi ứng dụng phức tạp lên và nhiều component cùng đọc, cùng sửa một dữ liệu, ta cần giải pháp quản lý state như Context, Redux, Zustand hay MobX để có một nguồn dữ liệu duy nhất và cập nhật giao diện đồng bộ. "When the application needs to store more than 10,000 records." không phải tiêu chí: lưu số lượng lớn bản ghi là việc của cơ sở dữ liệu cục bộ như SQLite, Realm, không phụ thuộc một ngưỡng cố định. "When you want to reduce the load on the backend API." liên quan tới cache, phân trang hay gộp yêu cầu nhiều hơn là tổ chức dữ liệu trong app. "When you need to synchronize data between multiple devices." đòi hỏi backend hoặc dịch vụ đồng bộ như Firebase, vì giải pháp quản lý state cục bộ không tự đồng bộ dữ liệu giữa các thiết bị.
Anavigate and push are the same and interchangeable
Bnavigate will navigate to the route if it is already in the stack, otherwise push a new one, while push will always add a new screen to the stack
Cnavigate can only be used for the initial route, and push is used for subsequent routes
Dpush will remove the previous screen from the stack
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "navigate will navigate to the route if it is already in the stack, otherwise push a new one, while push will always add a new screen to the stack". Trong Stack Navigator, navigate xử lý theo tên route: nếu màn hình đó đã có trong ngăn xếp thì quay về nó (cập nhật params) thay vì tạo bản mới, nếu chưa có thì mới đẩy thêm; push luôn đẩy một bản mới lên đỉnh ngăn xếp, nên có thể mở cùng một màn hình chi tiết nhiều lần chồng lên nhau. "navigate and push are the same and interchangeable" sai vì hai hàm khác nhau đúng ở điểm trên. "navigate can only be used for the initial route" sai vì navigate dùng được mọi lúc, route ban đầu do initialRouteName quyết định. "push will remove the previous screen from the stack" mô tả hành vi của replace, còn push giữ nguyên màn hình trước nằm bên dưới.