Hướng dẫn codewars javascript beginner - codewars javascript mới bắt đầu
Hướng dẫn này không giả định bất kỳ kiến thức phản ứng hiện có. Show
Trước khi chúng tôi bắt đầu hướng dẫnChúng tôi sẽ xây dựng một trò chơi nhỏ trong hướng dẫn này. Bạn có thể bị cám dỗ bỏ qua nó vì bạn không xây dựng các trò chơi - nhưng cho nó một cơ hội. Các kỹ thuật mà bạn sẽ học trong hướng dẫn là cơ bản để xây dựng bất kỳ ứng dụng phản ứng nào và làm chủ nó sẽ cho bạn hiểu sâu sắc về React.You might be tempted to skip it because you’re not building games — but give it a chance. The techniques you’ll learn in the tutorial are fundamental to building any React app, and mastering it will give you a deep understanding of React.
Hướng dẫn được chia thành một số phần:
Bạn không cần phải hoàn thành tất cả các phần cùng một lúc để có được giá trị từ hướng dẫn này. Cố gắng đi xa nhất có thể - ngay cả khi nó có một hoặc hai phần. Chúng ta đang xây dựng gì?Trong hướng dẫn này, chúng tôi sẽ chỉ ra cách xây dựng một trò chơi Tic-Tac-Toe tương tác với React. Bạn có thể thấy những gì chúng tôi sẽ xây dựng ở đây: Kết quả cuối cùng. Nếu mã không có ý nghĩa với bạn, hoặc nếu bạn không quen với cú pháp mã, thì đừng lo lắng! Mục tiêu của hướng dẫn này là giúp bạn hiểu phản ứng và cú pháp của nó.Final Result. If the code doesn’t make sense to you, or if you are unfamiliar with the code’s syntax, don’t worry! The goal of this tutorial is to help you understand React and its syntax. Chúng tôi khuyên bạn nên kiểm tra trò chơi Tic-Tac-Toe trước khi tiếp tục với hướng dẫn. Một trong những tính năng mà bạn nhận thấy là có một danh sách được đánh số ở bên phải của bảng trò chơi. Danh sách này cung cấp cho bạn một lịch sử của tất cả các động tác đã xảy ra trong trò chơi và nó được cập nhật khi trò chơi tiến triển. Bạn có thể đóng trò chơi tic-tac-toe một khi bạn đã quen thuộc với nó. Chúng tôi sẽ bắt đầu từ một mẫu đơn giản hơn trong hướng dẫn này. Bước tiếp theo của chúng tôi là thiết lập bạn để bạn có thể bắt đầu xây dựng trò chơi. Điều kiện tiên quyếtChúng tôi sẽ giả định rằng bạn có một số quen thuộc với HTML và JavaScript, nhưng bạn sẽ có thể theo dõi ngay cả khi bạn đến từ một ngôn ngữ lập trình khác. Chúng tôi cũng cho rằng bạn đã quen thuộc với các khái niệm lập trình như các chức năng, đối tượng, mảng và ở mức độ thấp hơn, các lớp. Nếu bạn cần xem lại JavaScript, chúng tôi khuyên bạn nên đọc hướng dẫn này. Lưu ý rằng chúng tôi cũng sử dụng một số tính năng từ ES6 - một phiên bản gần đây của JavaScript. Trong hướng dẫn này, chúng tôi sử dụng các chức năng, lớp, các lớp, 4 và 5. Bạn có thể sử dụng BABEL REP để kiểm tra mã ES6 biên dịch.Thiết lập cho hướng dẫnCó hai cách để hoàn thành hướng dẫn này: bạn có thể viết mã trong trình duyệt của mình hoặc bạn có thể thiết lập môi trường phát triển cục bộ trên máy tính của mình. Tùy chọn thiết lập 1: Viết mã trong trình duyệtĐây là cách nhanh nhất để bắt đầu! Đầu tiên, hãy mở mã khởi động này trong một tab mới. Tab mới sẽ hiển thị bảng trò chơi Tic-Tac-Toe trống và mã phản ứng. Chúng tôi sẽ chỉnh sửa mã React trong hướng dẫn này.Starter Code in a new tab. The new tab should display an empty tic-tac-toe game board and React code. We will be editing the React code in this tutorial. Bây giờ bạn có thể bỏ qua tùy chọn thiết lập thứ hai và chuyển đến phần tổng quan để có được cái nhìn tổng quan về React. Tùy chọn thiết lập 2: Môi trường phát triển địa phươngĐây là hoàn toàn tùy chọn và không bắt buộc cho hướng dẫn này! Tùy chọn: Hướng dẫn theo dõi cục bộ bằng cách sử dụng trình soạn thảo văn bản ưa thích của bạn Thiết lập này đòi hỏi nhiều công việc hơn nhưng cho phép bạn hoàn thành hướng dẫn bằng cách sử dụng trình soạn thảo bạn chọn. Dưới đây là các bước để làm theo:
Bây giờ nếu bạn chạy 4 trong thư mục dự án và mở 5 trong trình duyệt, bạn sẽ thấy một trường Tic-Tac-Toe trống.Chúng tôi khuyên bạn nên làm theo các hướng dẫn này để định cấu hình cú pháp làm nổi bật cho trình soạn thảo của bạn. Giúp tôi, tôi bị mắc kẹt!Nếu bạn bị mắc kẹt, hãy xem các tài nguyên hỗ trợ cộng đồng. Cụ thể, Chat Reactiflux là một cách tuyệt vời để giúp đỡ nhanh chóng. Nếu bạn không nhận được câu trả lời, hoặc nếu bạn vẫn bị mắc kẹt, xin vui lòng gửi một vấn đề và chúng tôi sẽ giúp bạn. Tổng quanBây giờ bạn đã thiết lập, hãy để Lừa nhận được một cái nhìn tổng quan về React! React là gì?React là một thư viện JavaScript khai báo, hiệu quả và linh hoạt để xây dựng giao diện người dùng. Nó cho phép bạn sáng tác các UI phức tạp từ các đoạn mã nhỏ và bị cô lập có tên là Thành phần. React có một vài loại thành phần khác nhau, nhưng chúng tôi sẽ bắt đầu với các lớp con 6:
Chúng tôi sẽ sớm nhận được các thẻ giống như XML. Chúng tôi sử dụng các thành phần để nói phản ứng những gì chúng tôi muốn thấy trên màn hình. Khi dữ liệu của chúng tôi thay đổi, React sẽ cập nhật và hiển thị lại một cách hiệu quả các thành phần của chúng tôi. Ở đây, Danh sách mua sắm là một lớp thành phần React, hoặc loại thành phần React. Một thành phần có trong các tham số, được gọi là 7 (viết tắt của các thuộc tính trên mạng) và trả về một phân cấp các chế độ xem để hiển thị thông qua phương thức 8.React component class, or React component type. A
component takes in parameters, called 7 (short for “properties”), and returns a hierarchy of views to display via the 8 method.Phương thức 8 trả về mô tả về những gì bạn muốn thấy trên màn hình. React lấy mô tả và hiển thị kết quả. Cụ thể, 8 trả về một yếu tố phản ứng, đây là một mô tả nhẹ về những gì để kết xuất. Hầu hết các nhà phát triển React sử dụng một cú pháp đặc biệt có tên là JS JSX, giúp các cấu trúc này dễ viết hơn. Cú pháp 1 được chuyển đổi tại thời điểm xây dựng thành 2. Ví dụ trên tương đương với:React element, which is a lightweight description of what to render. Most React developers use a special syntax called “JSX” which makes these structures
easier to write. The 1 syntax is transformed at build time to 2. The example above is equivalent to:
Xem phiên bản mở rộng đầy đủ. Nếu bạn tò mò, 3 được mô tả chi tiết hơn trong tài liệu tham khảo API, nhưng chúng tôi đã giành chiến thắng khi sử dụng nó trong hướng dẫn này. Thay vào đó, chúng tôi sẽ tiếp tục sử dụng JSX.JSX đi kèm với toàn bộ sức mạnh của JavaScript. Bạn có thể đặt bất kỳ biểu thức JavaScript nào trong niềng răng bên trong JSX. Mỗi phần tử React là một đối tượng JavaScript mà bạn có thể lưu trữ trong một biến hoặc vượt qua trong chương trình của mình. Thành phần 4 ở trên chỉ hiển thị các thành phần DOM tích hợp như 1 và 6. Nhưng bạn cũng có thể sáng tác và hiển thị các thành phần React tùy chỉnh. Ví dụ: bây giờ chúng ta có thể đề cập đến toàn bộ danh sách mua sắm bằng cách viết 7. Mỗi thành phần React được đóng gói và có thể hoạt động độc lập; Điều này cho phép bạn xây dựng UI phức tạp từ các thành phần đơn giản.Kiểm tra mã khởi độngNếu bạn sẽ làm việc trên hướng dẫn trong trình duyệt của mình, hãy mở mã này trong một tab mới: mã khởi động. Nếu bạn sẽ làm việc trên hướng dẫn cục bộ, thay vào đó hãy mở 8 trong thư mục dự án của mình (bạn đã chạm vào tệp này trong quá trình thiết lập).in your browser, open this code in a new tab: Starter Code. If you’re going to work on the tutorial locally, instead open 8 in your project folder (you have already touched this file during the
setup).Mã khởi đầu này là cơ sở của những gì chúng tôi xây dựng. Chúng tôi đã cung cấp kiểu dáng CSS để bạn chỉ cần tập trung vào việc học phản ứng và lập trình trò chơi tic-tac-toe. Bằng cách kiểm tra mã, bạn sẽ nhận thấy rằng chúng tôi có ba thành phần phản ứng:
Thành phần vuông hiển thị một 9 và bảng làm cho 9 hình vuông. Thành phần trò chơi hiển thị một bảng với các giá trị giữ chỗ mà chúng tôi sẽ sửa đổi sau này. Hiện tại không có thành phần tương tác.Truyền dữ liệu qua đạo cụĐể có được chân ướt, hãy để thử một số dữ liệu từ thành phần bảng của chúng tôi sang thành phần vuông của chúng tôi. Chúng tôi thực sự khuyên bạn nên gõ mã bằng tay khi bạn làm việc thông qua hướng dẫn và không sử dụng sao chép/dán. Điều này sẽ giúp bạn phát triển trí nhớ cơ bắp và sự hiểu biết mạnh mẽ hơn. Trong phương thức bảng 0, thay đổi mã để chuyển một prop có tên 1 sang hình vuông:
Thay đổi phương thức vuông ____ ____58 để hiển thị giá trị đó bằng cách thay thế 3 bằng 4:
Before:
Sau: Bạn sẽ thấy một số trong mỗi hình vuông trong đầu ra được hiển thị.
Xem toàn bộ mã tại thời điểm này Xin chúc mừng! Bạn chỉ cần chuyển một chỗ dựa từ một thành phần bảng cha cho một thành phần hình vuông con. Vượt qua đạo cụ là cách thông tin chảy trong các ứng dụng phản ứng, từ cha mẹ đến trẻ em. Tạo thành phần tương tácHãy để Fill Fill thành phần vuông với một X X khi chúng tôi nhấp vào nó. Trước tiên, hãy thay đổi thẻ nút được trả về từ chức năng thành phần hình vuông ____ ____75 thành điều này:
Nếu bạn nhấp vào một hình vuông ngay bây giờ, bạn sẽ thấy ‘nhấp vào bảng điều khiển của trình duyệt của bạn.
Như một bước tiếp theo, chúng tôi muốn thành phần hình vuông để nhớ rằng nó đã được nhấp và điền vào nó bằng một dấu X X. Để nhớ những thứ của người Viking, các thành phần sử dụng trạng thái.state. Các thành phần phản ứng có thể có trạng thái bằng cách đặt 1 trong các hàm tạo của chúng. 1 nên được coi là riêng tư đối với một thành phần phản ứng mà nó được xác định. Hãy để lưu trữ giá trị hiện tại của hình vuông trong 1 và thay đổi nó khi nhấp vào hình vuông.Đầu tiên, chúng tôi sẽ thêm một hàm tạo vào lớp để khởi tạo trạng thái:
Bây giờ, chúng tôi sẽ thay đổi phương thức Square Square 8 để hiển thị giá trị trạng thái hiện tại khi nhấp vào:
Sau những thay đổi này, thẻ 9 được trả về bởi phương thức Square ____ ____58 trông như thế này: 0Bằng cách gọi 7 từ một trình xử lý 8 trong phương thức hình vuông ____ ____58, chúng tôi nói phản ứng lại để hiển thị lại hình vuông bất cứ khi nào 9 được nhấp. Sau khi cập nhật, hình vuông ____ ____89 sẽ là 02, vì vậy chúng tôi sẽ thấy 03 trên bảng trò chơi. Nếu bạn nhấp vào bất kỳ hình vuông nào, 03 sẽ hiển thị.Khi bạn gọi 05 trong một thành phần, hãy tự động cập nhật các thành phần con bên trong nó.Xem toàn bộ mã tại thời điểm này Những công cụ phát triểnTiện ích mở rộng React Devtools cho Chrome và Firefox cho phép bạn kiểm tra cây thành phần React với các công cụ phát triển trình duyệt của bạn.
Các devtools React cho phép bạn kiểm tra các đạo cụ và trạng thái của các thành phần phản ứng của bạn. Sau khi cài đặt React DevTools, bạn có thể nhấp chuột phải vào bất kỳ yếu tố nào trên trang, nhấp vào kiểm tra, để mở các công cụ phát triển và các tab React (thành phần bên phải. Sử dụng các thành phần của các thành phần để kiểm tra cây thành phần. Tuy nhiên, lưu ý có một vài bước bổ sung để khiến nó hoạt động với CodePen:
Hoàn thành trò chơiBây giờ chúng tôi có các khối xây dựng cơ bản cho trò chơi tic-tac-toe của chúng tôi. Để có một trò chơi hoàn chỉnh, bây giờ chúng ta cần thay thế việc đặt X X. S và O O trên bảng, và chúng ta cần một cách để xác định người chiến thắng. Nâng trạng thái lênHiện tại, mỗi thành phần vuông duy trì trạng thái trò chơi. Để kiểm tra người chiến thắng, chúng tôi sẽ duy trì giá trị của từng trong số 9 ô vuông ở một địa điểm. Chúng tôi có thể nghĩ rằng hội đồng quản trị chỉ nên hỏi từng hình vuông cho trạng thái hình vuông. Mặc dù cách tiếp cận này là có thể trong React, chúng tôi không khuyến khích nó vì mã trở nên khó hiểu, dễ bị lỗi và khó tái cấu trúc. Thay vào đó, cách tiếp cận tốt nhất là lưu trữ trạng thái trò chơi trong thành phần bảng mẹ thay vì ở mỗi hình vuông. Thành phần bảng có thể cho mỗi hình vuông những gì cần hiển thị bằng cách chuyển một chỗ dựa, giống như chúng tôi đã làm khi chúng tôi chuyển một số cho mỗi hình vuông. Để thu thập dữ liệu từ nhiều trẻ em hoặc để có hai thành phần con giao tiếp với nhau, bạn cần phải khai báo trạng thái được chia sẻ trong thành phần cha mẹ của chúng thay thế. Thành phần cha mẹ có thể truyền lại trạng thái cho trẻ em bằng cách sử dụng đạo cụ; Điều này giữ cho các thành phần trẻ em đồng bộ với nhau và với thành phần cha mẹ. Nâng trạng thái thành một thành phần cha mẹ là phổ biến khi các thành phần React được tái cấu trúc - hãy để Lôi nắm lấy cơ hội này để thử nó. Thêm một hàm tạo vào bảng và đặt trạng thái ban đầu của bảng để chứa một mảng 9 null tương ứng với 9 hình vuông: 1Khi chúng tôi điền vào bảng sau, mảng 06 sẽ trông giống như thế này: 2Phương pháp bảng ____ ____ ____70 hiện trông như thế này: 3Ban đầu, chúng tôi đã vượt qua 1 prop xuống từ bảng để hiển thị số từ 0 đến 8 ở mỗi hình vuông. Trong một bước trước khác, chúng tôi đã thay thế các số bằng một dấu X X được xác định bởi trạng thái riêng của Square. Đây là lý do tại sao Square hiện đang bỏ qua prop 1 được chuyển cho nó bởi hội đồng quản trị.Bây giờ chúng tôi sẽ sử dụng cơ chế vượt qua prop một lần nữa. Chúng tôi sẽ sửa đổi bảng để hướng dẫn từng hình vuông riêng lẻ về giá trị hiện tại của nó ( 02, 11 hoặc 12). Chúng tôi đã xác định mảng 13 trong hàm tạo bảng và chúng tôi sẽ sửa đổi phương thức bảng ____ ____ ____70 để đọc từ nó: 4Xem toàn bộ mã tại thời điểm này Những công cụ phát triển Tiện ích mở rộng React Devtools cho Chrome và Firefox cho phép bạn kiểm tra cây thành phần React với các công cụ phát triển trình duyệt của bạn. Thay vào đó, chúng tôi sẽ chuyển một chức năng từ bảng đến quảng trường và chúng tôi sẽ có gọi là chức năng đó khi nhấp vào hình vuông. Chúng tôi sẽ thay đổi phương thức 0 trong bảng thành: 5
Bây giờ, chúng tôi đã chuyển hai đạo cụ từ bảng đến vuông: 1 và 8. Prop 8 là một hàm mà Square có thể gọi khi nhấp. Chúng tôi sẽ thực hiện các thay đổi sau đây thành hình vuông:
Sau những thay đổi này, thành phần vuông trông như thế này: 6Khi một hình vuông được nhấp, hàm 8 do bảng cung cấp được gọi. Ở đây, một đánh giá về cách đạt được điều này:
Khi chúng tôi cố gắng nhấp vào một hình vuông, chúng tôi sẽ gặp lỗi vì chúng tôi đã xác định 44. Bây giờ chúng tôi sẽ thêm 44 vào lớp bảng: 7Xem toàn bộ mã tại thời điểm này Sau những thay đổi này, chúng tôi lại có thể nhấp vào hình vuông để lấp đầy chúng, giống như chúng tôi đã có trước đây. Tuy nhiên, bây giờ trạng thái được lưu trữ trong thành phần bảng thay vì các thành phần vuông riêng lẻ. Khi trạng thái bảng thay đổi, các thành phần vuông tự động xuất lại. Giữ trạng thái của tất cả các ô vuông trong thành phần bảng sẽ cho phép nó xác định người chiến thắng trong tương lai. Vì các thành phần vuông không còn duy trì trạng thái, các thành phần vuông nhận được các giá trị từ thành phần bảng và thông báo cho thành phần bảng khi chúng nhấp chuột. Theo thuật ngữ React, các thành phần vuông hiện là các thành phần được kiểm soát. Hội đồng quản trị có toàn quyền kiểm soát chúng.controlled components. The Board has full control over them. Lưu ý làm thế nào trong 44, chúng tôi gọi 50 để tạo một bản sao của mảng 13 để sửa đổi thay vì sửa đổi mảng hiện có. Chúng tôi sẽ giải thích lý do tại sao chúng tôi tạo một bản sao của mảng 13 trong phần tiếp theo.Tại sao tính bất biến lại quan trọngTrong ví dụ mã trước, chúng tôi đã đề xuất rằng bạn tạo một bản sao của mảng 13 bằng phương thức 54 thay vì sửa đổi mảng hiện có. Bây giờ chúng tôi sẽ thảo luận về tính bất biến và tại sao tính bất biến là quan trọng để học.Nhìn chung có hai cách tiếp cận để thay đổi dữ liệu. Cách tiếp cận đầu tiên là làm thay đổi dữ liệu bằng cách thay đổi trực tiếp các giá trị dữ liệu. Cách tiếp cận thứ hai là thay thế dữ liệu bằng một bản sao mới có những thay đổi mong muốn. Thay đổi dữ liệu với đột biến 8Thay đổi dữ liệu mà không cần đột biến 9Kết quả cuối cùng là như nhau nhưng bằng cách không đột biến (hoặc thay đổi dữ liệu cơ bản) trực tiếp, chúng tôi có được một số lợi ích được mô tả dưới đây. Các tính năng phức tạp trở nên đơn giảnBất biến làm cho các tính năng phức tạp dễ thực hiện hơn nhiều. Sau đó, trong hướng dẫn này, chúng tôi sẽ thực hiện tính năng du hành thời gian của người Viking cho phép chúng tôi xem lại lịch sử trò chơi Tic-Tac-Toe và Lịch sử nhảy trở lại với các động tác trước đó. Chức năng này không dành riêng cho các trò chơi - khả năng hoàn tác và làm lại một số hành động nhất định là một yêu cầu phổ biến trong các ứng dụng. Tránh đột biến dữ liệu trực tiếp cho phép chúng tôi giữ nguyên các phiên bản trước của lịch sử trò chơi và sử dụng lại chúng sau. Phát hiện các thay đổiPhát hiện các thay đổi trong các đối tượng có thể thay đổi là khó khăn vì chúng được sửa đổi trực tiếp. Phát hiện này yêu cầu đối tượng có thể thay đổi được so sánh với các bản sao trước đó của chính nó và toàn bộ cây đối tượng phải đi qua. Phát hiện những thay đổi trong các đối tượng bất biến dễ dàng hơn đáng kể. Nếu đối tượng bất biến đang được tham chiếu là khác với ảnh trước, thì đối tượng đã thay đổi. Xác định khi nào nên kết xuất lại trong ReactLợi ích chính của tính bất biến là nó giúp bạn xây dựng các thành phần thuần túy trong React. Dữ liệu bất biến có thể dễ dàng xác định xem các thay đổi đã được thực hiện, giúp xác định khi nào một thành phần yêu cầu kết xuất lại. Bạn có thể tìm hiểu thêm về 55 và cách bạn có thể xây dựng các thành phần thuần túy bằng cách đọc hiệu suất tối ưu hóa.Các thành phần chức năngBây giờ chúng tôi sẽ thay đổi hình vuông thành một thành phần chức năng.function component. Trong React, các thành phần chức năng là một cách đơn giản hơn để viết các thành phần chỉ chứa phương thức 8 và don lồng có trạng thái riêng của chúng. Thay vì xác định một lớp mở rộng 6, chúng ta có thể viết một hàm lấy 7 làm đầu vào và trả về những gì nên được hiển thị. Các thành phần chức năng ít tẻ nhạt hơn để viết hơn các lớp và nhiều thành phần có thể được thể hiện theo cách này.function components are a simpler way to write components that only contain a 8 method and don’t have their own state. Instead of defining a class which extends 6, we can write a function that takes 7 as input and returns what should be
rendered. Function components are less tedious to write than classes, and many components can be expressed this way.Thay thế lớp vuông bằng chức năng này: 0Chúng tôi đã thay đổi 59 thành 7 cả hai lần nó xuất hiện.Xem toàn bộ mã tại thời điểm này
Thay phiên nhauBây giờ chúng ta cần phải sửa chữa một khiếm khuyết rõ ràng trong trò chơi tic-tac-toe của chúng ta: không thể đánh dấu trên bảng. Theo mặc định, chúng tôi sẽ đặt bước đầu tiên là X X. Chúng tôi có thể đặt mặc định này bằng cách sửa đổi trạng thái ban đầu trong Trình xây dựng bảng của chúng tôi: 1Mỗi lần người chơi di chuyển, 63 (boolean) sẽ được lật để xác định người chơi nào tiếp theo và trạng thái trò chơi sẽ được lưu. Chúng tôi sẽ cập nhật chức năng bảng ____ ____144 để lật giá trị của 63: 2Với sự thay đổi này, có thể thay phiên nhau. Thử nó! Hãy để chúng tôi thay đổi văn bản trạng thái trên mạng trong bảng điều khiển ____ ____58 để hiển thị người chơi nào có lượt tiếp theo: 3Sau khi áp dụng các thay đổi này, bạn nên có thành phần bảng này: 4Xem toàn bộ mã tại thời điểm này Ghi chúKhi chúng tôi sửa đổi hình vuông thành một thành phần chức năng, chúng tôi cũng đã thay đổi 61 thành 62 ngắn hơn (lưu ý việc thiếu dấu ngoặc đơn ở cả hai bên). 5Thay phiên nhau Bây giờ chúng ta cần phải sửa chữa một khiếm khuyết rõ ràng trong trò chơi tic-tac-toe của chúng ta: không thể đánh dấu trên bảng. 6Theo mặc định, chúng tôi sẽ đặt bước đầu tiên là X X. Chúng tôi có thể đặt mặc định này bằng cách sửa đổi trạng thái ban đầu trong Trình xây dựng bảng của chúng tôi: 7Xem toàn bộ mã tại thời điểm này Ghi chú Khi chúng tôi sửa đổi hình vuông thành một thành phần chức năng, chúng tôi cũng đã thay đổi cd my-app cd src # If you're using a Mac or Linux: rm -f * # Or, if you're on Windows: del * # Then, switch back to the project folder cd ..61 thành cd my-app cd src # If you're using a Mac or Linux: rm -f * # Or, if you're on Windows: del * # Then, switch back to the project folder cd ..62 ngắn hơn (lưu ý việc thiếu dấu ngoặc đơn ở cả hai bên).Thay phiên nhau Bây giờ chúng ta cần phải sửa chữa một khiếm khuyết rõ ràng trong trò chơi tic-tac-toe của chúng ta: không thể đánh dấu trên bảng.Theo mặc định, chúng tôi sẽ đặt bước đầu tiên là X X. Chúng tôi có thể đặt mặc định này bằng cách sửa đổi trạng thái ban đầu trong Trình xây dựng bảng của chúng tôi: Mỗi lần người chơi di chuyển, 63 (boolean) sẽ được lật để xác định người chơi nào tiếp theo và trạng thái trò chơi sẽ được lưu. Chúng tôi sẽ cập nhật chức năng bảng ____ ____144 để lật giá trị của 63:Với sự thay đổi này, có thể thay phiên nhau. Thử nó! 8Hãy để chúng tôi thay đổi văn bản trạng thái trên mạng trong bảng điều khiển ____ ____58 để hiển thị người chơi nào có lượt tiếp theo: Sau khi áp dụng các thay đổi này, bạn nên có thành phần bảng này:Tuyên bố một người chiến thắng Bây giờ chúng tôi cho thấy người chơi nào đến lượt tiếp theo, chúng tôi cũng nên hiển thị khi trò chơi giành chiến thắng và không còn lượt nào để thực hiện. Sao chép chức năng trợ giúp này và dán nó ở cuối tệp: Với một mảng gồm 9 hình vuông, chức năng này sẽ kiểm tra người chiến thắng và trả lại 02, 11 hoặc 12 nếu thích hợp. 9Tiếp theo, chúng tôi sẽ có thành phần bảng nhận được các đạo cụ 13 và 8 từ thành phần trò chơi. Vì bây giờ chúng tôi có một trình xử lý nhấp chuột duy nhất trong bảng cho nhiều ô vuông, chúng tôi sẽ cần chuyển vị trí của mỗi hình vuông vào trình xử lý 8 để cho biết hình vuông nào được nhấp. Dưới đây là các bước cần thiết để chuyển đổi thành phần bảng:
Thành phần bảng bây giờ trông như thế này: 0Chúng tôi sẽ cập nhật chức năng thành phần trò chơi ____ ____58 để sử dụng mục nhập lịch sử gần đây nhất để xác định và hiển thị trạng thái trò chơi: 1Vì thành phần trò chơi hiện đang hiển thị trạng thái trò chơi, chúng tôi có thể xóa mã tương ứng khỏi phương thức bảng ____ ____58. Sau khi tái cấu trúc, chức năng bảng 8 trông như thế này: 2Cuối cùng, chúng ta cần chuyển phương thức 44 từ thành phần bảng sang thành phần trò chơi. Chúng tôi cũng cần sửa đổi 44 vì trạng thái thành phần trò chơi được cấu trúc khác nhau. Trong phương thức trò chơi ____ ____144, chúng tôi kết hợp các mục lịch sử mới vào 80. 3
Tại thời điểm này, thành phần bảng chỉ cần các phương thức 0 và 8. Trò chơi trạng thái của trò chơi và phương pháp 44 nên nằm trong thành phần trò chơi.Xem toàn bộ mã tại thời điểm này Hiển thị các động tác trong quá khứVì chúng tôi đang ghi lại lịch sử trò chơi tic-tac-toe, giờ đây chúng tôi có thể hiển thị nó cho người chơi dưới dạng danh sách các bước di chuyển trong quá khứ. Chúng tôi đã học được trước đó rằng các yếu tố phản ứng là các đối tượng JavaScript hạng nhất; Chúng tôi có thể vượt qua chúng trong các ứng dụng của chúng tôi. Để hiển thị nhiều mục trong React, chúng ta có thể sử dụng một loạt các yếu tố phản ứng. Trong JavaScript, các mảng có phương thức 10 thường được sử dụng để ánh xạ dữ liệu đến dữ liệu khác, ví dụ: 4Sử dụng phương pháp 11, chúng ta có thể ánh xạ lịch sử di chuyển của chúng ta để phản ứng các phần tử biểu thị các nút trên màn hình và hiển thị danh sách các nút để nhảy nhảy theo các bước đi trong quá khứ.Hãy cùng với ____ ____211 trên 80 trong trò chơi Phương pháp ____ ____58: 5Xem toàn bộ mã tại thời điểm này Hiển thị các động tác trong quá khứ Vì chúng tôi đang ghi lại lịch sử trò chơi tic-tac-toe, giờ đây chúng tôi có thể hiển thị nó cho người chơi dưới dạng danh sách các bước di chuyển trong quá khứ.
Trong JavaScript, các mảng có phương thức 10 thường được sử dụng để ánh xạ dữ liệu đến dữ liệu khác, ví dụ:Sử dụng phương pháp import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css';11, chúng ta có thể ánh xạ lịch sử di chuyển của chúng ta để phản ứng các phần tử biểu thị các nút trên màn hình và hiển thị danh sách các nút để nhảy nhảy theo các bước đi trong quá khứ.Hãy cùng với ____ ____211 trên 80 trong trò chơi Phương pháp ____ ____58:Khi chúng tôi lặp lại thông qua mảng 80, biến 16 đề cập đến giá trị phần tử 80 hiện tại và 18 đề cập đến chỉ số phần tử 80 hiện tại. Chúng tôi chỉ quan tâm đến 18 ở đây, do đó 16 không được chỉ định cho bất cứ điều gì.Đối với mỗi lần di chuyển trong lịch sử trò chơi tic-tac-toe, chúng tôi tạo một mục danh sách 22 chứa nút 9. Nút có trình xử lý 8 gọi một phương thức gọi là 25. Chúng tôi đã thực hiện phương pháp 26. Hiện tại, chúng ta sẽ thấy một danh sách các động thái đã xảy ra trong trò chơi và cảnh báo trong bảng điều khiển công cụ phát triển cho biết:CẢNH BÁO: Mỗi đứa trẻ trong một mảng hoặc iterator nên có một chế độ chống đỡ khóa duy nhất. Kiểm tra phương pháp kết xuất của trò chơi trên mạng. 7Hãy để thảo luận về những gì cảnh báo trên có nghĩa là. 8Chọn một chìa khóa 30 là một tài sản đặc biệt và dành riêng trong React (cùng với 31, một tính năng nâng cao hơn). Khi một phần tử được tạo, React trích xuất thuộc tính 30 và lưu trữ khóa trực tiếp trên phần tử được trả về. Mặc dù 30 có thể trông giống như nó thuộc về 7, 30 không thể được tham chiếu bằng 36. React tự động sử dụng 30 để quyết định cập nhật thành phần nào. Một thành phần không thể hỏi về 30 của nó.Nó rất khuyến khích bạn chỉ định các khóa thích hợp bất cứ khi nào bạn xây dựng danh sách động. Nếu bạn không có khóa thích hợp, bạn có thể muốn xem xét tái cấu trúc dữ liệu của mình để bạn thực hiện. If you don’t have an appropriate key, you may want to consider restructuring your data so that you do. Nếu không có khóa được chỉ định, React sẽ trình bày cảnh báo và sử dụng chỉ mục mảng làm khóa theo mặc định. Sử dụng chỉ mục mảng làm khóa là vấn đề khi cố gắng đặt lại một danh sách các mục hoặc chèn/xóa các mục trong danh sách. Rõ ràng vượt qua 39 làm im lặng cảnh báo nhưng có các vấn đề tương tự như các chỉ số mảng và không được khuyến nghị trong hầu hết các trường hợp.Chìa khóa không cần phải là duy nhất trên toàn cầu; Họ chỉ cần là duy nhất giữa các thành phần và anh chị em của họ. Thực hiện du hành thời gianTrong lịch sử trò chơi tic-tac-toe, mỗi lần di chuyển trong quá khứ có một ID duy nhất được liên kết với nó: nó là số lượng tuần tự của động thái. Các động tác không bao giờ được đặt hàng lại, xóa hoặc chèn ở giữa, vì vậy, nó an toàn khi sử dụng chỉ số di chuyển làm khóa. Trong phương thức thành phần trò chơi ____ ____58, chúng ta có thể thêm khóa là 41 và React Cảnh báo về các khóa sẽ biến mất: 9Xem toàn bộ mã tại thời điểm này Nhấp vào bất kỳ nút nào trong danh sách các nút của mục. Trước khi chúng tôi triển khai 42, chúng tôi sẽ thêm 44 vào trạng thái thành phần trò chơi để cho biết bước nào chúng tôi hiện đang xem.Đầu tiên, thêm 45 vào trạng thái ban đầu trong trò chơi 5: 0Tiếp theo, chúng tôi sẽ xác định phương thức 42 trong trò chơi để cập nhật 44 đó. Chúng tôi cũng đặt 63 thành true nếu số mà chúng tôi thay đổi 44 thành thậm chí: 1Lưu ý trong phương pháp 42, chúng tôi đã cập nhật tài sản 80 của tiểu bang. Đó là bởi vì các bản cập nhật trạng thái được hợp nhất hoặc trong các từ đơn giản hơn, React sẽ chỉ cập nhật các thuộc tính được đề cập trong phương thức 05 để lại trạng thái còn lại. Để biết thêm thông tin, hãy xem tài liệu.see the documentation.Bây giờ chúng tôi sẽ thực hiện một vài thay đổi đối với phương thức trò chơi ____ ____144 bắn khi bạn nhấp vào một hình vuông. Trạng thái 44 mà chúng tôi đã thêm phản ánh động thái được hiển thị cho người dùng ngay bây giờ. Sau khi chúng tôi thực hiện một động thái mới, chúng tôi cần cập nhật 44 bằng cách thêm 57 như một phần của đối số 7. Điều này đảm bảo chúng tôi không thể bị mắc kẹt cho thấy cùng một động thái sau khi một động thái mới được thực hiện.Chúng tôi cũng sẽ thay thế đọc 59 bằng 60. Điều này đảm bảo rằng nếu chúng ta quay ngược thời gian và sau đó thực hiện một bước đi mới từ thời điểm đó, chúng ta sẽ vứt bỏ tất cả lịch sử tương lai của người Hồi giáo mà bây giờ sẽ không chính xác. 2Cuối cùng, chúng tôi sẽ sửa đổi phương thức thành phần trò chơi 8 từ luôn luôn đưa ra bước di chuyển cuối cùng để đưa ra động thái hiện được chọn theo 44: 3Nếu chúng tôi nhấp vào bất kỳ bước nào trong lịch sử trò chơi, bảng Tic-Tac-Toe sẽ ngay lập tức cập nhật để hiển thị bảng trông như thế nào sau khi bước đó xảy ra. Xem toàn bộ mã tại thời điểm này Nhấp vào bất kỳ nút nào trong danh sách các nút của mục. Trước khi chúng tôi triển khai import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css';42, chúng tôi sẽ thêm import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css';44 vào trạng thái thành phần trò chơi để cho biết bước nào chúng tôi hiện đang xem.Đầu tiên, thêm 45 vào trạng thái ban đầu trong trò chơi 5:
Chúng tôi cũng sẽ thay thế đọc 59 bằng 60. Điều này đảm bảo rằng nếu chúng ta quay ngược thời gian và sau đó thực hiện một bước đi mới từ thời điểm đó, chúng ta sẽ vứt bỏ tất cả lịch sử tương lai của người Hồi giáo mà bây giờ sẽ không chính xác.Cuối cùng, chúng tôi sẽ sửa đổi phương thức thành phần trò chơi 8 từ luôn luôn đưa ra bước di chuyển cuối cùng để đưa ra động thái hiện được chọn theo 44:Final Result. 3
Cho phép người chơi xem lại lịch sử trò chơi và xem các phiên bản trước của bảng trò chơi. |