MMA301DễKỳ 7Chuyên ngành Cập nhật 24/07/2026
Multiplatform Mobile App Development - Phát triển ứng dụng di động đa nền tảng
130Câu hỏi
7Chủ đề
Câu hỏi của môn
44/130 câuCòn 86
25In Bridge architecture, which thread is the place where the native code is executed?4 lựa chọnTrung bình50% trả lời đúng
AJavaScript Thread
BNative Thread
CShadow Thread
DReactNative Thread
Lời giải
Mở trang câu hỏi này →Trong kiến trúc Bridge, luồng mà nơi thực thi mã natively được gọi là Native Thread. Điều này có nghĩa là mã natively được thực thi trên một luồng riêng biệt, độc lập với luồng JavaScript. Điều này cho phép mã natively được thực thi một cách hiệu quả và an toàn, mà không ảnh hưởng đến luồng JavaScript. Native Thread được sử dụng để thực thi mã natively, chẳng hạn như mã được viết bằng ngôn ngữ lập trình C hoặc C++, trong khi JavaScript Thread được sử dụng để thực thi mã JavaScript. Shadow Thread và ReactNative Thread không liên quan đến kiến trúc Bridge.
26In Bridge architecture, which of the following is not a thread in the React Native architecture?4 lựa chọnTrung bình67% trả lời đúng
AJavaScript Thread
BNative Thread
CShadow Thread
DRender Thread
Lời giải
Mở trang câu hỏi này →Trong kiến trúc Bridge, có bốn luồng chính trong kiến trúc React Native. Đó là luồng JavaScript, luồng Native, luồng Shadow và luồng Render. Tuy nhiên, luồng Render không phải là một trong những luồng chính trong kiến trúc Bridge. Luồng Render được sử dụng để thực hiện các tác vụ liên quan đến giao diện người dùng, trong khi các luồng khác được sử dụng để thực hiện các tác vụ khác nhau trong ứng dụng. Vì vậy, câu trả lời đúng là "Render Thread".
27What is the purpose of SafeAreaView component?4 lựa chọnTrung bình
AThe purpose of SafeAreaView is to render content within the safe area boundaries of a device
BSafeAreaView automatically adjusts the font size of text elements to ensure readability in different screen sizes
CSafeAreaView provides a secure environment for rendering sensitive user data
DAll of the above
Lời giải
Mở trang câu hỏi này →SafeAreaView là một thành phần trong React Native giúp đảm bảo nội dung được render trong giới hạn của vùng an toàn (safe area) trên thiết bị. Vùng an toàn này thường bao gồm các phần không thể chạm vào của thiết bị, chẳng hạn như notch, camera, loa, v.v. Khi sử dụng SafeAreaView, bạn có thể đảm bảo rằng nội dung của ứng dụng không bị che khuất hoặc bị ảnh hưởng bởi các phần này. Điều này giúp cải thiện trải nghiệm người dùng và đảm bảo rằng ứng dụng của bạn luôn được hiển thị một cách rõ ràng và đẹp mắt. Ngoài ra, SafeAreaView cũng giúp bạn dễ dàng tùy chỉnh nội dung của ứng dụng để phù hợp với thiết bị và màn hình của người dùng.
AuseReducer always re-renders the component, while useState does not
BuseReducer is designed for more complex state logic and state transitions, while useState is suited for simple state management
CuseReducer cannot be used with functional components, while useState can
DuseReducer is used for global state management, while useState is only for local state
Lời giải
Mở trang câu hỏi này →Khi sử dụng React Native, có hai phương thức quản lý trạng thái quan trọng là useReducer và useState. useReducer được thiết kế để quản lý trạng thái phức tạp và các chuyển đổi trạng thái, trong khi useState phù hợp cho việc quản lý trạng thái đơn giản. Điều này có nghĩa là useReducer có thể xử lý các trạng thái phức tạp hơn, chẳng hạn như các trạng thái phụ thuộc vào nhau, trong khi useState chỉ phù hợp cho các trường hợp đơn giản. Ví dụ, nếu bạn cần quản lý một trạng thái có nhiều thuộc tính và các quy tắc phức tạp để chuyển đổi trạng thái, thì useReducer sẽ là lựa chọn tốt hơn. Ngược lại, nếu bạn chỉ cần quản lý một trạng thái đơn giản, chẳng hạn như một checkbox hoặc một input text, thì useState sẽ đủ.
29Which of the following is not an option to manage data throughout a React Native app?4 lựa chọnTrung bình
A
useReducerB
ReduxC
MobXD
StorageLời giải
Mở trang câu hỏi này →Để quản lý dữ liệu trong một ứng dụng React Native, có nhiều phương pháp khác nhau. Trong số các lựa chọn trên, "Storage" không phải là một phương pháp quản lý dữ liệu. "useReducer", "Redux", và "MobX" là các thư viện phổ biến được sử dụng để quản lý trạng thái trong ứng dụng React Native. "useReducer" là một hook trong React giúp quản lý trạng thái bằng cách sử dụng một hàm giảm giá. "Redux" là một thư viện quản lý trạng thái tập trung, giúp phân chia ứng dụng thành các phần nhỏ hơn và dễ quản lý hơn. "MobX" là một thư viện quản lý trạng thái dựa trên phản ứng, giúp ứng dụng phản ứng với các thay đổi trong dữ liệu. Ngược lại, "Storage" là một phương pháp lưu trữ dữ liệu, chẳng hạn như bộ nhớ đệm hoặc cơ sở dữ liệu, mà không liên quan trực tiếp đến việc quản lý trạng thái trong ứng dụng.
30In React Navigation, which hook should you use to get access to route parameters inside a functional component?4 lựa chọnTrung bình
A
useNavigationStateB
useRouteC
useNavigationD
useFocusEffectLời giải
Mở trang câu hỏi này →Để truy cập các tham số của đường dẫn trong một thành phần chức năng trong React Navigation, bạn nên sử dụng hook 'useRoute'. Hook này cho phép bạn truy cập vào các tham số của đường dẫn hiện tại và sử dụng chúng trong thành phần của bạn. Ví dụ, nếu bạn có một đường dẫn như '/users/:id', bạn có thể sử dụng 'useRoute' để truy cập vào tham số ':id' và sử dụng nó để tải dữ liệu người dùng từ cơ sở dữ liệu. Điều này giúp bạn có thể xây dựng các ứng dụng di động phức tạp và linh hoạt hơn.
A
renderSectionHeaderB
renderItemC
renderRowD
renderComponentLời giải
Mở trang câu hỏi này →SectionList trong React cho phép bạn render từng phần tử trong danh sách của mình bằng cách sử dụng phương thức renderSectionHeader và renderItem. Phương thức renderSectionHeader được sử dụng để render tiêu đề của từng phần tử, trong khi renderItem được sử dụng để render nội dung của từng phần tử. Điều này cho phép bạn có thể tùy chỉnh cách mà danh sách của mình được hiển thị trên màn hình.
32Which of the following methods is NOT a valid AsyncStorage method in React Native?4 lựa chọnDễ100% trả lời đúng
A
AsyncStorage.mergeItem(key, value)B
AsyncStorage.removeItem(key)C
AsyncStorage.getAllKeys()D
AsyncStorage.clearAll()Lời giải
Mở trang câu hỏi này →AsyncStorage là một công cụ được sử dụng để lưu trữ dữ liệu trong ứng dụng React Native. Tuy nhiên, trong các phương thức lưu trữ dữ liệu, có một số phương thức không hợp lệ. Trong các lựa chọn trên, phương thức "AsyncStorage.clearAll()" không phải là một phương thức hợp lệ. Điều này là vì AsyncStorage không hỗ trợ phương thức clearAll(). Thay vào đó, bạn có thể sử dụng phương thức clear() để xóa tất cả dữ liệu trong AsyncStorage. Ngoài ra, các phương thức khác như mergeItem(), removeItem() và getAllKeys() đều là hợp lệ và có thể được sử dụng để lưu trữ và quản lý dữ liệu trong ứng dụng.
33Which prop of the FlatList component is used to specify the key extractor function for the list items?4 lựa chọnDễ
A
keyExtractorB
extractKeyC
itemKeyD
getKeyLời giải
Mở trang câu hỏi này →Trong khi sử dụng FlatList để hiển thị danh sách các item, bạn cần phải cung cấp một hàm key extractor để xác định mỗi item trong danh sách. Hàm này sẽ nhận vào một item và trả về một giá trị duy nhất để xác định item đó. Trong React Native, bạn có thể sử dụng prop keyExtractor của FlatList để chỉ định hàm key extractor. Hàm này sẽ được gọi cho mỗi item trong danh sách và sẽ trả về một giá trị duy nhất để xác định item đó. Ví dụ, nếu bạn có một danh sách các item có id, bạn có thể sử dụng hàm key extractor để trả về id của mỗi item.
34Which prop of the Switch component in React Native is used to define the function to be executed when the switch state changes?4 lựa chọnTrung bình
A
onChangeB
onValueChangeC
onToggleD
onPressLời giải
Mở trang câu hỏi này →Trong React Native, Switch là một thành phần được sử dụng để tạo ra các nút chuyển đổi. Khi trạng thái của nút chuyển đổi thay đổi, bạn có thể định nghĩa một hàm để thực hiện một hành động cụ thể. Prop được sử dụng để định nghĩa hàm này là 'onValueChange'. Khi bạn sử dụng 'onValueChange', bạn sẽ nhận được giá trị mới của trạng thái switch sau khi nó được thay đổi. Điều này cho phép bạn thực hiện các hành động khác nhau dựa trên trạng thái hiện tại của switch. Ví dụ, bạn có thể sử dụng 'onValueChange' để cập nhật trạng thái của ứng dụng khi người dùng bật hoặc tắt switch.
35Which property is used to define the main axis direction of a flex container in React Native?4 lựa chọnTrung bình67% trả lời đúng
Aflex-direction
Bjustify-content
Calign-items
Dflex-wrap
Lời giải
Mở trang câu hỏi này →Để định nghĩa hướng chính của một hộp flex trong React Native, bạn cần sử dụng thuộc tính flex-direction. Thuộc tính này cho phép bạn xác định hướng chính của hộp flex, có thể là từ trái sang phải (tương tự như dòng văn bản), từ phải sang trái, từ trên xuống dưới hoặc từ dưới lên trên. Ví dụ, nếu bạn muốn hộp flex có hướng chính từ trái sang phải, bạn có thể sử dụng thuộc tính flex-direction với giá trị 'row'. Nếu bạn muốn hộp flex có hướng chính từ trên xuống dưới, bạn có thể sử dụng thuộc tính flex-direction với giá trị 'column'.
36Which of the following is not benefit of JSX?4 lựa chọnDễ
AIt is faster because it makes improvements while compiling code in JavaScript
BIt is also safe and most errors can be caught during integration
CIt makes it easier to write templates if you are good with HTML
DIt requires less memory consumption compared to traditional JavaScript syntax
Lời giải
Mở trang câu hỏi này →JSX (JavaScript XML) là một tính năng của React giúp bạn viết mã HTML và JavaScript cùng một lúc. Tuy nhiên, không phải tất cả các lợi ích của JSX đều đúng. Trong các lựa chọn trên, câu trả lời đúng là "It requires less memory consumption compared to traditional JavaScript syntax". Điều này là sai vì JSX thực sự đòi hỏi nhiều bộ nhớ hơn so với syntax JavaScript truyền thống. JSX được biên dịch thành JavaScript trước khi được chạy, điều này có thể dẫn đến việc sử dụng nhiều bộ nhớ hơn. Các lợi ích khác của JSX bao gồm việc giúp bạn viết mã nhanh hơn và dễ dàng hơn, cũng như giúp bạn bắt lỗi sớm hơn trong quá trình tích hợp.
37Which of the following props in ScrollView controls the direction of scrolling?4 lựa chọnDễ100% trả lời đúng
A
horizontalB
scrollDirectionC
scrollEnabledD
directionLời giải
Mở trang câu hỏi này →Trong các lựa chọn trên, thuộc tính nào trong ScrollView kiểm soát hướng di chuyển của màn hình?
ScrollView là một thành phần quan trọng trong giao diện người dùng của ứng dụng di động. Nó cho phép người dùng di chuyển qua các nội dung trên màn hình. Để kiểm soát hướng di chuyển của màn hình, chúng ta cần sử dụng thuộc tính phù hợp.
Trong các lựa chọn trên, thuộc tính "horizontal" được sử dụng để kiểm soát hướng di chuyển của màn hình. Nếu bạn muốn màn hình di chuyển theo chiều ngang, bạn có thể sử dụng thuộc tính này. Ngoài ra, bạn cũng có thể sử dụng thuộc tính "scrollDirection" để kiểm soát hướng di chuyển của màn hình.
Tuy nhiên, thuộc tính "scrollEnabled" chỉ kiểm soát khả năng di chuyển của màn hình, không kiểm soát hướng di chuyển. Và thuộc tính "direction" không phải là thuộc tính hợp lệ trong ScrollView.
Vì vậy, trong các lựa chọn trên, thuộc tính "horizontal" và "scrollDirection" là hai lựa chọn hợp lệ để kiểm soát hướng di chuyển của màn hình trong ScrollView.
38Consider the following code snippet4 lựa chọncó codeDễ100% trả lời đúng
using AsyncStorage in React Native. async function saveData(key, value) {
try {
await AsyncStorage.setItem(key, value);
}
catch (error) {
console.error('Error saving data', error);
}
}
async function readData(key) {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
console.log('Retrieved value:', value);
}
}
catch (error) {
console.error('Error reading data', error);
}
}What will be the output if saveData('username', 'john_doe') is called, followed by readData('username'), assuming no errors occur?
ARetrieved value: john_doe
BError reading data [error object]
CError saving data [error object]
DNo output, as AsyncStorage operations are non-blocking and asynchronous
Lời giải
Mở trang câu hỏi này →Khi gọi hàm saveData('username', 'john_doe') và sau đó gọi hàm readData('username'), chúng ta sẽ thấy output là 'Retrieved value: john_doe'. Điều này là vì hàm saveData sẽ lưu trữ giá trị 'john_doe' vào AsyncStorage với key là 'username'. Sau đó, hàm readData sẽ đọc giá trị từ AsyncStorage và in ra console với giá trị vừa được lưu trữ. Nếu không có lỗi xảy ra, hàm readData sẽ trả về giá trị được lưu trữ, vì vậy output sẽ là 'Retrieved value: john_doe'.
39Which component is a wrapper for making views respond properly to touches (Android only)?4 lựa chọnTrung bình67% trả lời đúng
A
TouchableNativeFeedbackB
TouchableOpacityC
TouchableHighlightD
TouchableWithoutFeedbackLời giải
Mở trang câu hỏi này →Trong lập trình di động, đặc biệt là Android, việc xử lý chạm (touch) là một phần quan trọng của giao diện người dùng. Để giúp các view phản ứng đúng cách với các chạm, chúng ta cần sử dụng một thành phần cụ thể. Trong các lựa chọn đã cho, thành phần nào là một wrapper giúp các view này phản ứng đúng cách với các chạm?
40Which API platform is used for capturing user's location data?4 lựa chọnTrung bình
A
LocationPickerB
GeolocationC
LocationD
PickerLời giải
Mở trang câu hỏi này →Để xác định vị trí của người dùng, chúng ta cần sử dụng một nền tảng API phù hợp. Trong số các lựa chọn đã cho, nền tảng API được sử dụng để bắt được dữ liệu vị trí của người dùng là Geolocation. Geolocation là một tính năng của trình duyệt web, cho phép nó xác định vị trí của thiết bị dựa trên thông tin từ các nguồn khác nhau như GPS, Wi-Fi, mạng di động và các thông tin khác. Nó cung cấp cho người dùng khả năng xác định vị trí của mình và cung cấp dữ liệu vị trí cho các ứng dụng web. Vì vậy, trong trường hợp này, Geolocation là lựa chọn đúng.
41Which of the following are iOS components?4 lựa chọnTrung bình50% trả lời đúng
A
DrawerLayoutAndroidB
TouchableNativeFeedbackC
InputAccessoryViewD
SafeAreaViewLời giải
Mở trang câu hỏi này →Câu hỏi này yêu cầu bạn xác định các thành phần iOS trong danh sách lựa chọn. Để trả lời câu hỏi này, bạn cần biết về các thành phần Android và iOS. DrawerLayoutAndroid là một thành phần Android, vì vậy nó không phải là một thành phần iOS. TouchableNativeFeedback cũng là một thành phần Android, vì vậy nó cũng không phải là một thành phần iOS. InputAccessoryView và SafeAreaView là hai thành phần iOS. InputAccessoryView được sử dụng để thêm một bộ phận phụ vào phía trên của một màn hình, trong khi SafeAreaView được sử dụng để đảm bảo rằng một thành phần luôn nằm trong vùng an toàn của màn hình. Vì vậy, câu trả lời đúng cho câu hỏi này là InputAccessoryView và SafeAreaView.
42Which of the following hooks can you use to perform an action only when the screen is first mounted in React Navigation?4 lựa chọnTrung bình
A
useNavigationB
useRouteC
useFocusEffectD
useIsFocusedLời giải
Mở trang câu hỏi này →Để thực hiện một hành động chỉ khi màn hình đầu tiên được mount trong React Navigation, bạn có thể sử dụng hook nào sau đây?
43Which method is used again whenever there is any change in the state or props?4 lựa chọnTrung bình60% trả lời đúng
A
render()B
shouldComponentUpdate()C
constructor()D
getSnapshotBeforeUpdate()Lời giải
Mở trang câu hỏi này →Khi có bất kỳ thay đổi nào trong trạng thái hoặc thuộc tính của một thành phần React, phương thức nào được sử dụng lại để cập nhật giao diện?
44Which 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 →Để sử dụng onChangeText và setText cùng nhau trong một TextInput component, chúng ta cần hiểu rõ về cách sử dụng các hàm này. onChangeText là một hàm được gọi khi người dùng nhập vào văn bản mới trong TextInput. Hàm này nhận vào một tham số là text, đại diện cho văn bản mới được nhập vào. setText là một hàm được sử dụng để cập nhật giá trị của một biến. Để sử dụng onChangeText và setText cùng nhau, chúng ta cần sử dụng một hàm mũi tên (arrow function) để chuyển đổi text thành một giá trị có thể được sử dụng bởi setText. Ví dụ, onChangeText={text => setText(text)} là một cách sử dụng đúng. Trong ví dụ này, hàm mũi tên nhận vào text và sử dụng setText để cập nhật giá trị của biến. Các ví dụ khác như onChangeText=text => setText(text) hoặc onChangeText={text => setTextValue(text)} không chính xác vì chúng không sử dụng hàm mũi tên đúng cách. Ví dụ cuối cùng onChangeText={text = setText(text)} không chính xác vì nó sử dụng dấu = sai, thay vì sử dụng dấu => để định nghĩa hàm mũi tên.