From 204edb3a6a5c04e2540375789c3907a5936a08e6 Mon Sep 17 00:00:00 2001 From: mrevanzak Date: Mon, 1 May 2023 18:48:57 +0700 Subject: [PATCH 01/14] docs: title and intro section --- src/content/learn/queueing-a-series-of-state-updates.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/learn/queueing-a-series-of-state-updates.md b/src/content/learn/queueing-a-series-of-state-updates.md index a63b7205b..d3d71c315 100644 --- a/src/content/learn/queueing-a-series-of-state-updates.md +++ b/src/content/learn/queueing-a-series-of-state-updates.md @@ -1,10 +1,10 @@ --- -title: Queueing a Series of State Updates +title: Mengantre Serangkaian Pembaruan State --- -Setting a state variable will queue another render. But sometimes you might want to perform multiple operations on the value before queueing the next render. To do this, it helps to understand how React batches state updates. +Mengatur variabel *state* akan menambahkan antrean (*queue*) *render* baru. Terkadang Anda ingin melakukan beberapa operasi terhadap nilai sebelum menambahkan antran *render* sealnjutnya. Untuk melakukannya, pentin untuk memahami bagaimana React melakukan pembaruan *state* secara berkelompok. @@ -600,4 +600,4 @@ Now you know how this part of React works! - \ No newline at end of file + From 437bea96fe7b258a2c32a7a83249c8897e9ec747 Mon Sep 17 00:00:00 2001 From: mrevanzak Date: Mon, 1 May 2023 18:57:26 +0700 Subject: [PATCH 02/14] docs: fixed typo on intro --- src/content/learn/queueing-a-series-of-state-updates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/learn/queueing-a-series-of-state-updates.md b/src/content/learn/queueing-a-series-of-state-updates.md index d3d71c315..c88a81858 100644 --- a/src/content/learn/queueing-a-series-of-state-updates.md +++ b/src/content/learn/queueing-a-series-of-state-updates.md @@ -4,7 +4,7 @@ title: Mengantre Serangkaian Pembaruan State -Mengatur variabel *state* akan menambahkan antrean (*queue*) *render* baru. Terkadang Anda ingin melakukan beberapa operasi terhadap nilai sebelum menambahkan antran *render* sealnjutnya. Untuk melakukannya, pentin untuk memahami bagaimana React melakukan pembaruan *state* secara berkelompok. +Mengatur variabel *state* akan menambahkan antrean (*queue*) *render* baru. Terkadang Anda ingin melakukan beberapa operasi terhadap nilai sebelum menambahkan antrean *render* selanjutnya. Untuk melakukannya, penting untuk memahami bagaimana React melakukan pembaruan *state* secara berkelompok. From 0048f6d22c02dc30c93ad64931878868d824a8ed Mon Sep 17 00:00:00 2001 From: mrevanzak Date: Mon, 1 May 2023 19:46:45 +0700 Subject: [PATCH 03/14] docs: React batches state updates section --- .../queueing-a-series-of-state-updates.md | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/content/learn/queueing-a-series-of-state-updates.md b/src/content/learn/queueing-a-series-of-state-updates.md index c88a81858..e0fe11b0c 100644 --- a/src/content/learn/queueing-a-series-of-state-updates.md +++ b/src/content/learn/queueing-a-series-of-state-updates.md @@ -10,14 +10,14 @@ Mengatur variabel *state* akan menambahkan antrean (*queue*) *render* baru. Terk -* What "batching" is and how React uses it to process multiple state updates -* How to apply several updates to the same state variable in a row +* Apa itu "pengelompokan (*batching*)" dan bagaimana React menggunakannya untuk memproses beberapa pembaruan *state* +* Bagaimana menerapkan beberapa pembaruan ke variabel *state* yang sama secara berurutan -## React batches state updates {/*react-batches-state-updates*/} +## Mengelompokkan pembaruan state dalam React {/*react-batches-state-updates*/} -You might expect that clicking the "+3" button will increment the counter three times because it calls `setNumber(number + 1)` three times: +Anda mungkin berharap bahwa menekan tombol "+3" akan menambahkan hitungan tiga kali karena memanggil `setNumber(number + 1)` tiga kali: @@ -47,7 +47,9 @@ h1 { display: inline-block; margin: 10px; width: 30px; text-align: center; } -However, as you might recall from the previous section, [each render's state values are fixed](/learn/state-as-a-snapshot#rendering-takes-a-snapshot-in-time), so the value of `number` inside the first render's event handler is always `0`, no matter how many times you call `setNumber(1)`: +Namun, seperti yang mungkin Anda ingat dari bagian sebelumnya, [nilai *state* setiap *render* adalah tetap](/learn/state-as-a-snapshot#rendering-takes-a-snapshot-in-time), sehingga nilai `number` di dalam *event handler* *render* pertama selalu `0`, tidak peduli berapa kali Anda memanggil `setNumber(1)`: + +```js ```js setNumber(0 + 1); @@ -55,15 +57,15 @@ setNumber(0 + 1); setNumber(0 + 1); ``` -But there is one other factor at play here. **React waits until *all* code in the event handlers has run before processing your state updates.** This is why the re-render only happens *after* all these `setNumber()` calls. +Akan tetapi, ada satu faktor lain yang berperan di sini. **React menunggu sampai semua kode dalam *event handler* selesai dijalankan sebelum memproses pembaruan *state* Anda.** Inilah sebabnya mengapa *re-render* hanya terjadi setelah semua `setNumber()` dipanggil. -This might remind you of a waiter taking an order at the restaurant. A waiter doesn't run to the kitchen at the mention of your first dish! Instead, they let you finish your order, let you make changes to it, and even take orders from other people at the table. +Ini mungkin mengingatkan Anda pada seorang pelayan yang menerima pesanan di restoran. Seorang pelayan tidak berlari ke dapur saat Anda menyebutkan hidangan pertama Anda! Sebaliknya, mereka membiarkan Anda menyelesaikan pesanan Anda, membiarkan Anda mengubahnya, dan bahkan menerima pesanan dari orang lain di meja tersebut. - + -This lets you update multiple state variables--even from multiple components--without triggering too many [re-renders.](/learn/render-and-commit#re-renders-when-state-updates) But this also means that the UI won't be updated until _after_ your event handler, and any code in it, completes. This behavior, also known as **batching,** makes your React app run much faster. It also avoids dealing with confusing "half-finished" renders where only some of the variables have been updated. +Ini memungkinkan Anda memperbarui beberapa variabel *state*--bahkan dari beberapa komponen--tanpa memicu terlalu banyak [*re-render*.](/learn/render-and-commit#re-renders-when-state-updates) Akan tetapi, hal ini ini membuat UI tidak akan diperbarui hingga _setelah_ *event handler* Anda, dan kode apa pun di dalamnya, selesai dijalankan. Perilaku ini, juga dikenal sebagai **pengelompokan,** membuat aplikasi React Anda berjalan lebih cepat. Ini juga menghindari penanganan *render* "setengah jadi" yang membingungkan ketika hanya beberapa variabel yang diperbarui. -**React does not batch across *multiple* intentional events like clicks**--each click is handled separately. Rest assured that React only does batching when it's generally safe to do. This ensures that, for example, if the first button click disables a form, the second click would not submit it again. +**React tidak melakukan pengelompokkan pada beberapa *event* yang disengaja, seperti klik**--setiap klik ditangani secara terpisah. Pastikan bahwa React hanya melakukan pengelompokan ketika aman untuk dilakukan. Ini memastikan bahwa, misalnya, jika klik tombol pertama menonaktifkan *form*, klik kedua tidak akan mengirimkannya lagi. ## Updating the same state multiple times before the next render {/*updating-the-same-state-multiple-times-before-the-next-render*/} From 977744b3376c302c23c19ae92d403d6018a872fc Mon Sep 17 00:00:00 2001 From: mrevanzak Date: Mon, 1 May 2023 21:58:50 +0700 Subject: [PATCH 04/14] docs: updating the same state multiple times before the next render section --- .../queueing-a-series-of-state-updates.md | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/content/learn/queueing-a-series-of-state-updates.md b/src/content/learn/queueing-a-series-of-state-updates.md index e0fe11b0c..cfd16c524 100644 --- a/src/content/learn/queueing-a-series-of-state-updates.md +++ b/src/content/learn/queueing-a-series-of-state-updates.md @@ -67,11 +67,13 @@ Ini memungkinkan Anda memperbarui beberapa variabel *state*--bahkan dari beberap **React tidak melakukan pengelompokkan pada beberapa *event* yang disengaja, seperti klik**--setiap klik ditangani secara terpisah. Pastikan bahwa React hanya melakukan pengelompokan ketika aman untuk dilakukan. Ini memastikan bahwa, misalnya, jika klik tombol pertama menonaktifkan *form*, klik kedua tidak akan mengirimkannya lagi. -## Updating the same state multiple times before the next render {/*updating-the-same-state-multiple-times-before-the-next-render*/} +## Memperbarui state yang sama beberapa kali sebelum render selanjutnya {/*updating-the-same-state-multiple-times-before-the-next-render*/} It is an uncommon use case, but if you would like to update the same state variable multiple times before the next render, instead of passing the *next state value* like `setNumber(number + 1)`, you can pass a *function* that calculates the next state based on the previous one in the queue, like `setNumber(n => n + 1)`. It is a way to tell React to "do something with the state value" instead of just replacing it. -Try incrementing the counter now: +Ini bukanlah penggunaan yang umum, tetapi jika Anda ingin memperbarui variabel *state* yang sama berulang kali sebelum *render* selanjutnya, alih-alih mengoper nilai *state* selanjutnya seperti `setNumber(number + 1)`, Anda dapat mengoper *function* yang menghitung *state* selanjutnya berdasarkan nilai sebelumnya pada antrean, seperti `setNumber(n => n + 1)`. Ini adalah cara untuk memberi tahu React untuk "melakukan sesuatu dengan nilai *state*" daripada hanya menggantinya. + +Cobalah untuk menambahkan hitungan sekarang: @@ -101,10 +103,10 @@ h1 { display: inline-block; margin: 10px; width: 30px; text-align: center; } -Here, `n => n + 1` is called an **updater function.** When you pass it to a state setter: +Disini, `n => n + 1` disebut fungsi *updater.* Ketika Anda mengirimkannya ke pengatur (*setter*) state: -1. React queues this function to be processed after all the other code in the event handler has run. -2. During the next render, React goes through the queue and gives you the final updated state. +1. React mengantre fungsi ini untuk diproses setelah semua kode lain dalam *event handler* dijalankan. +2. Saat render berikutnya, React akan melewati antrean dan memberi Anda *state* terakhir yang diperbarui. ```js setNumber(n => n + 1); @@ -112,23 +114,23 @@ setNumber(n => n + 1); setNumber(n => n + 1); ``` -Here's how React works through these lines of code while executing the event handler: +Berikut adalah cara kerja React melalui baris kode ini saat menjalankan *event handler*: 1. `setNumber(n => n + 1)`: `n => n + 1` is a function. React adds it to a queue. 1. `setNumber(n => n + 1)`: `n => n + 1` is a function. React adds it to a queue. 1. `setNumber(n => n + 1)`: `n => n + 1` is a function. React adds it to a queue. -When you call `useState` during the next render, React goes through the queue. The previous `number` state was `0`, so that's what React passes to the first updater function as the `n` argument. Then React takes the return value of your previous updater function and passes it to the next updater as `n`, and so on: +Ketika Anda memanggil `useState` saat *render* berikutnya, React akan melewati antrean. *State* `number` sebelumnya adalah `0`, jadi itulah yang akan diteruskan React ke fungsi *updater* pertama sebagai argumen `n`. Kemudian React mengambil hasil dari fungsi *updater* sebelumnya dan meneruskannya ke *updater* berikutnya sebagai `n`, dan begitu seterusnya: -| queued update | `n` | returns | +| antrean diperbarui | `n` | hasil | |--------------|---------|-----| | `n => n + 1` | `0` | `0 + 1 = 1` | | `n => n + 1` | `1` | `1 + 1 = 2` | | `n => n + 1` | `2` | `2 + 1 = 3` | -React stores `3` as the final result and returns it from `useState`. +React menyimpan `3` sebagai hasil akhir dan mengembalikannya dari `useState`. -This is why clicking "+3" in the above example correctly increments the value by 3. +Inila mengapa mengklik "+3" pada contoh di atas dengan benar meningkatkan nilai sebesar 3. ### What happens if you update state after replacing it {/*what-happens-if-you-update-state-after-replacing-it*/} What about this event handler? What do you think `number` will be in the next render? From 7bbbeeda067b399dac508b31e681c6639116962f Mon Sep 17 00:00:00 2001 From: mrevanzak Date: Tue, 2 May 2023 13:22:04 +0700 Subject: [PATCH 05/14] docs: what happens if you update state after replacing it section --- .../queueing-a-series-of-state-updates.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/content/learn/queueing-a-series-of-state-updates.md b/src/content/learn/queueing-a-series-of-state-updates.md index cfd16c524..3e25967f4 100644 --- a/src/content/learn/queueing-a-series-of-state-updates.md +++ b/src/content/learn/queueing-a-series-of-state-updates.md @@ -131,9 +131,9 @@ Ketika Anda memanggil `useState` saat *render* berikutnya, React akan melewati a React menyimpan `3` sebagai hasil akhir dan mengembalikannya dari `useState`. Inila mengapa mengklik "+3" pada contoh di atas dengan benar meningkatkan nilai sebesar 3. -### What happens if you update state after replacing it {/*what-happens-if-you-update-state-after-replacing-it*/} +### Apa yang terjadi jika Anda memperbarui state setelah menggantinya {/*what-happens-if-you-update-state-after-replacing-it*/} -What about this event handler? What do you think `number` will be in the next render? +Bagaimana dengan *event handler* ini? Menurut Anda berapa nilai `number` pada *render* berikutnya? ```js