THẢO LUẬN

Cảm ơn bạn đã truyển tải kiến thức

0

Thanks anh, hóng phần 2 quá 😆😆😆

+1
Avatar
đã bình luận cho bài viết
thg 1 20, 2021 1:55 SA

ok mình sẽ sớm cập nhật lên git

0

bài viết rất hay và dễ hiểu, mong bạn ra thêm nhiều bài nữa về js và reactjs

0
thg 1 20, 2021 1:15 SA

ồ cái này đúng nè, thanks bận

0
thg 1 19, 2021 5:52 CH

Phát biểu rằng state là imutable và readonly là đúng, nhưng mới chỉ đúng một nửa câu chuyện, và ví dụ bạn lấy là sai. Cốt lõi vấn đề đó là địa chỉ. React ko cho phép gán biến state sang địa chỉ mới mà ko thông qua hàm setState, đồng thời React nhận biết và render lại màn hình dựa vào sự thay đổi địa chỉ ấy. Nhưng vẫn có cách làm thay đổi giá trị của biến state mà ko làm thay đổi địa chỉ của biến. Sau đây là 2 practice điển hình trong thực tế:

  • Nếu state là một mảng, bạn vẫn có thể push thêm phần tử vào mảng bình thường, giá trị của nó được thay đổi ngay luôn thời điểm ấy, nhưng địa chỉ của mảng vẫn thế nên React ko biết mà render lại. Khi bạn làm cho render tiếp một lần nữa, bạn sẽ thấy những phần tử mới đã được đẩy vào mảng rồi.
  • Nếu state là một object, bạn vẫn có thể thực hiện gán giá trị mới cho thuộc tính của nó. Ví dụ: const [customerData, setCustomerData] = useState({ customerId: 1 }) ..... customerData.customerId = 2; console.log("customerId là: ", customerData.customerId); // 2 // thậm chí thêm thuộc tính mới cho state ngay và luôn cũng được customerData.customerName = "Tèo"; console.log("customerName là: ", customerData.customerName); // Tèo

Đương nhiên ko khuyến khích làm cách này, vì rất khổ cho người fix bug. Chúng ta nên làm theo luồng logic thông thường, khi nào cần gán giá trị mới thì khởi tạo hay là chế một object, một array mới rồi dùng setState mà gán. Trong trường hợp muốn gán ngay mà ko đợi vòng đời sau mới cập nhật thay đổi, bạn có thể thay bằng dùng useRef, hoặc ok dùng cách này nếu bạn biết chắc mình đang làm cái gì và có ảnh hưởng gì ko. Vì màn hình sẽ render lại mỗi khi state thay đổi, vậy nên bạn cần đặt câu hỏi lớn hơn, "Chỗ này có cần thiết phải render lại ko? Chỗ này có khiến chương trình bị render quá nhiều ko?". Từ đó bạn đưa ra quyết định.

0

showbiz có Trấn Thành nói câu nào là trending câu đó, viblo có Trực sa tank viết bài nào trending bài đó

0
Avatar
đã bình luận cho bài viết
thg 1 19, 2021 4:04 CH

Bài viết bổ ích quá, chắc bạn chịu khó tnay thì k có bạn gái đâu nhỉ

0
thg 1 19, 2021 4:02 CH

oke bạn nhé 😄

0
thg 1 19, 2021 3:28 CH

má, cám ơn bác nhiều. nãy giờ thấy code mẫu trên gg ko hiểu tại sao phải có nginx trong khi local có cần nginx đâu 😄 tks

+1
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 1 19, 2021 1:17 CH

Tôi cũng đang làm theo cách này, quản lý view/css/js = thư mục đánh theo tên là đc mà.

0
thg 1 19, 2021 11:35 SA

Bác giải thích giúp e là tại sao của e luôn bị sender nốt found k ạ. e đã làm như hướng dẫn rồi Screen Shot 2021-01-19 at 16.51.51.png

0

@dinhmh Khi tạo payload, mình đã đệm =00 vào giữa những chữ cái để khi convert.quoted-printable-decode nó sẽ xóa hết những byte đó đi, sau đó như mình đã giải thích phía trên, sử dụng chuyển đổi bảng mã UTF-16 sang UTF-8 để loại bỏ Payload thứ 2 và decode base64 để ra đoạn mã hoàn chỉnh 😄

0

bạn giải thích thêm về payload ở bước 3 được k? 🤔

0
thg 1 19, 2021 8:42 SA

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

    mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    String channelId = getString(R.string.project_id);
    android.app.NotificationManager notificationManager = (android.app.NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(
                channelId,
                "Channel human readable title",
                android.app.NotificationManager.IMPORTANCE_DEFAULT);
        notificationManager.createNotificationChannel(channel);

    }
    Intent intent1 = new Intent(this, MainActivity.class);
    intent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(App.getInstance(), 0, intent1, PendingIntent.FLAG_ONE_SHOT);

    Notification notification = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Icar Tracking")
            .setContentText("Giữ an toàn bạn nhé!!!")
            .setAutoCancel(false)
            .setContentIntent(pendingIntent)
            .setOngoing(true)
            .setChannelId(getString(R.string.project_id))
            .build();
    startForeground(2001, notification);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return START_NOT_STICKY;
    }
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000,
            0, mLocationListener);
    return START_NOT_STICKY;
}

Mình đã thử startForceground nhưng khi kill app thì khoảng 20s sau service vẫn ngỏm là sao ạ

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 1 19, 2021 8:38 SA

Theme của mình đã phức tạp ở việc tạo css mới để ghi đè css cũ, thay đổi layout và có tạo ra hai nhánh ở git để quản lý rồi, giờ mình chỉ muốn là laravel có hỗ trợ multiple theme ở trong thư mục resources, tạo 2 view và control nó dc k?

0

@cyb3reagle giữa dòng đời tất nập, ta vô tình đâm phầm phập vào nhau 😆

0

Chúng ta như những người xa lạ vô tình gặp nhau giữa dòng đời thôi bác ơi.

0

@cyb3reagle Nói chung là cái xóa log kia thì mình k được nhưng 2 người đồng nghiệp của mình thì xóa bt, còn mình thì xóa log bằng cái cách convert file log, vì khi đấy k có payload convert được thì nó sẽ trả về rỗng ✌️. Cơ mà bác có phải là minhnb mà em biết k nhỉ :-s.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí