aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh hoạ state thay đổi và làm giao diện React Native cập nhật lại

React Native Switch: cập nhật value từ onValueChange và khóa đúng bằng disabled

Suong Nguyen by Suong Nguyen
28/10/2026
in React Native
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Switch có thể phản ứng khi bấm nhưng rồi trở lại giá trị cũ nếu prop value không được cập nhật. Đây là một component có điều khiển: trạng thái bạn truyền vào vẫn là nguồn dữ liệu quyết định giao diện.

Bài dành cho dự án React Native TypeScript đã chạy được màn hình cơ bản. Tài liệu Switch hiện chọn phiên bản 0.88 và API React được đối chiếu ngày 28/10/2026. Ví dụ được rà theo tài liệu, chưa build hoặc thử native trên Android/iOS trong lượt biên tập.

1. Tách giá trị cài đặt khỏi khả năng chỉnh sửa

Ví dụ có hai boolean: compact là giá trị cài đặt “Chế độ gọn”, còn editing cho biết màn hình có cho chỉnh sửa hay không. Khóa chỉnh sửa không có nghĩa phải tự đổi compact thành false.

Việc tách hai ý nghĩa giúp giao diện giữ đúng giá trị khi bị khóa. Trong sản phẩm thật, editing có thể phụ thuộc trạng thái lưu hoặc quyền ứng dụng; ở đây nó chỉ là một nút mô phỏng local, không phải cơ chế phân quyền backend.

2. Component minh họa đầy đủ

Đặt component vào màn hình đã xử lý vùng an toàn của ứng dụng. Ví dụ không gọi mạng và không lưu cài đặt xuống thiết bị:

import React, {useState} from 'react';
import {Button, StyleSheet, Switch, Text, View} from 'react-native';

export default function CompactSettingScreen() {
  const [compact, setCompact] = useState(false);
  const [editing, setEditing] = useState(true);

  return (
    <View style={styles.screen}>
      <View style={styles.row}>
        <Text style={styles.label}>Chế độ gọn</Text>
        <Switch
          accessibilityLabel="Chế độ gọn"
          value={compact}
          onValueChange={next => setCompact(next)}
          disabled={!editing}
        />
      </View>
      <Text style={styles.status}>
        Giá trị: {compact ? 'Bật' : 'Tắt'}
      </Text>
      <Text style={styles.status}>
        {editing ? 'Có thể chỉnh sửa.' : 'Đang khóa chỉnh sửa.'}
      </Text>
      <Button
        title={editing ? 'Khóa chỉnh sửa' : 'Cho phép chỉnh sửa'}
        onPress={() => setEditing(previous => !previous)}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  screen: {flex: 1, padding: 24},
  row: {flexDirection: 'row', alignItems: 'center'},
  label: {flex: 1, fontSize: 18},
  status: {fontSize: 16, marginVertical: 12},
});

Callback nhận giá trị boolean mới và chuyển nó vào state. Sau khi render lại, value nhận đúng state đó. Dòng text bên dưới là một điểm quan sát cùng nguồn dữ liệu, giúp bạn kiểm tra rằng phần trình bày và công tắc đang thống nhất.

3. Vì sao Switch có thể bật rồi quay về?

Một trường hợp thường gặp là truyền value={false} cố định nhưng trong callback chỉ ghi log. Native control có thể phản hồi thao tác, nhưng khi giao diện tiếp tục nhận value cũ, nó vẫn phải thể hiện giá trị đó.

Trường hợp khác là callback sửa một biến thường thay vì gọi setter hoặc cập nhật store mà component đang đọc. Hãy lần theo đường dữ liệu: callback đổi ở đâu, màn hình subscribe vào đâu và prop value có thực sự nhận giá trị mới không.

Với callback onValueChange, giá trị đích đã được cung cấp. Dùng next trực tiếp giúp ý định rõ ràng hơn việc luôn đảo một state có thể cũ. Nếu chỉ cần một nút “đảo trạng thái” không có giá trị đích, functional updater như nút editing trong ví dụ lại phù hợp.

4. Disabled là một trạng thái tương tác riêng

Bật compact, sau đó bấm Khóa chỉnh sửa. Giá trị vẫn cần hiện là Bật, nhưng người dùng không còn đổi Switch bằng thao tác bình thường. Mở khóa và kiểm tra có thể đổi lại mà không bị reset ngoài ý muốn.

Không chỉ giảm opacity rồi coi như đã khóa; hình thức mờ không tự thay thế prop disabled. Ngược lại, disabled của UI cũng không thay thế kiểm tra quyền ở nơi thực thi nghiệp vụ. Hai tầng có trách nhiệm khác nhau.

Đối với một cài đặt cần gửi server, bạn phải chọn rõ lưu sau khi xác nhận hay cập nhật giao diện trước rồi phục hồi khi lỗi. Ví dụ này chưa triển khai một trong hai chính sách đó, nên không được dùng output local để khẳng định lưu đã thành công.

Kiểm tra giao diện

Thử trạng thái ban đầu, bật, tắt, khóa khi đang bật và mở khóa. Sau mỗi thao tác, đối chiếu Switch với dòng Giá trị. Thử cỡ chữ lớn để nhãn không ép mất công tắc và dùng TalkBack/VoiceOver để xác nhận nhãn, trạng thái được nhận biết phù hợp.

Đừng gán kết quả pixel của iOS làm chuẩn cho Android. Control native có cách hiển thị riêng; nếu tùy biến màu, đọc từng prop và kiểm tra cả hai nền tảng thay vì giả định màu của track và thumb luôn giống nhau.

Giới hạn và bước tiếp theo

Khi component bị tạo lại, state local có thể trở về giá trị khởi tạo. Muốn giữ cài đặt qua lần mở ứng dụng tiếp theo, cần một nguồn lưu bền vững và bước đọc dữ liệu ban đầu riêng. Bài chưa triển khai storage, đồng bộ server hoặc kiểm thử thiết bị.

Bắt đầu với một nguồn boolean rõ ràng và một callback cập nhật đúng nguồn đó. Sau khi vòng điều khiển đã đúng, thêm trạng thái lưu và xử lý lỗi theo yêu cầu sản phẩm sẽ dễ kiểm tra hơn.

Nguồn tham khảo

  • React Native: Switch
  • React: useState
  • React Native: Accessibility

Tags: React NativeStateSwitch
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh hoạ FlatList hiển thị danh sách bài viết trong React Native

React Native SectionList: nhóm dữ liệu với key và tiêu đề riêng cho từng phần

by Suong Nguyen
27/10/2026
0

Dựng danh sách đơn theo trạng thái bằng SectionList, giữ key ổn định và xử lý nhóm rỗng cùng cập nhật dữ liệu.

Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native Image: cover và contain khác nhau trong cùng một khung ảnh

by Suong Nguyen
26/10/2026
0

Tách kích thước khung khỏi cách ảnh được co giãn, so sánh cover/contain bằng cùng ảnh nguồn và kiểm tra lỗi tải ảnh mạng.

Minh hoạ điều hướng giữa các màn hình trong React Native bằng stack và tab

React Native Modal: đóng bằng nút Back Android qua onRequestClose

by Suong Nguyen
25/10/2026
0

Quản lý visible và onRequestClose cho Modal, hiểu vì sao BackHandler không nhận sự kiện khi modal đang mở và kiểm tra các đường đóng.

Minh hoạ style và layout trong React Native với màn hình mobile, spacing và typography

React Native useWindowDimensions: layout đổi chiều và vẫn đọc được chữ lớn

by Suong Nguyen
24/10/2026
0

Dùng useWindowDimensions cho layout theo cửa sổ hiện tại, giữ font scaling và kiểm tra màn hình hẹp, xoay máy, chữ lớn.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native Switch: cập nhật value từ onValueChange và khóa đúng bằng disabled
  • Phỏng vấn JavaScript: vì sao callback trong vòng lặp đều đọc cùng giá trị?
  • Android ClipboardManager: sao chép text và tránh thông báo trùng từ Android 13

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply