React教程,第12部分:研讨会,第3阶段TODO应用

在React课程的今天翻译中,我们建议您完成使用JavaScript创建组件集的实际任务,并继续使用TODO应用程序。

图片

第1部分:课程概述,React,ReactDOM和JSX普及的原因
第2部分:功能组件
第3部分:组件文件,项目结构
第4部分:父级和子级组件
第5部分:TODO应用程序的开始工作,样式设计的基础
第6部分:关于本课程的一些功能,JSX和JavaScript
第7部分:内联样式
第8部分:继续研究TODO应用程序,熟悉组件的属性
第9部分:组件属性
第10部分:使用组件特性和样式的研讨会
第11部分:动态标记生成和映射数组方法
第12部分:研讨会,TODO应用程序的第三阶段工作
第13部分:基于类的组件
第14部分:关于基于类的组件,组件状态的研讨会
第15部分:组件健康研讨会
第16部分:TODO应用程序的第四阶段工作,事件处理
第17部分:TODO应用程序的第五阶段工作,修改组件的状态
第18部分:TODO应用程序的第六阶段工作
第19部分:组件生命周期方法
第20部分:条件渲染的第一课
第21部分:关于条件渲染的第二课​​和研讨会
第22部分:TODO应用程序的第七阶段工作,从外部资源下载数据
第23部分:关于使用表格的第一课
第24部分:第二形式课
第25部分:使用表单的研讨会
第26部分:应用程序体系结构,容器/组件模式
第27部分:课程项目

第22课。 动态形成零件组


原创

▍工作


基于create-react-app生成的标准React应用程序项目,并使用vschoolProducts.jsvschoolProducts.js数据文件的代码,创建一个应用程序,该应用程序在页面上显示使用标准.map()数组方法生成的Product组件列表。基于来自vschoolProducts.js数据。

记住要创建组件实例,并向它们传递具有唯一标识符的key属性,否则系统将发出警告。

在解决问题的过程中,可以使用App.js文件的以下准备:

 import React from "react" import productsData from "./vschoolProducts" function App() { return (   <div>         </div> ) } export default App 

这是vschoolProducts.js文件vschoolProducts.js

 const products = [   {       id: "1",       name: "Pencil",       price: 1,       description: "Perfect for those who can't remember things! 5/5 Highly recommend."   },   {       id: "2",       name: "Housing",       price: 0,       description: "Housing provided for out-of-state students or those who can't commute"   },   {       id: "3",       name: "Computer Rental",       price: 300,       description: "Don't have a computer? No problem!"   },   {       id: "4",       name: "Coffee",       price: 2,       description: "Wake up!"   },   {       id: "5",       name: "Snacks",       price: 0,       description: "Free snacks!"   },   {       id: "6",       name: "Rubber Duckies",       price: 3.50,       description: "To help you solve your hardest coding problems."   },   {       id: "7",       name: "Fidget Spinner",       price: 21.99,       description: "Because we like to pretend we're in high school."   },   {       id: "8",       name: "Sticker Set",       price: 14.99,       description: "To prove to other devs you know a lot."   } ] export default products 

▍解决方案


这是App.js文件的代码:

 import React from "react" import Product from "./Product" import productsData from "./vschoolProducts" function App() {   const productComponents = productsData.map(item => <Product key={item.id} product={item}/>)     return (       <div>           {productComponents}       </div>   ) } export default App 

请注意,数据文件中对象的id属性是可选的。 此属性对于设置通过Product组件实例的.map()方法创建的key属性很有用。

这是Product.js文件的代码:

 import React from "react" function Product(props) {   return (       <div>           <h2><font color="#3AC1EF">{props.product.name}</font></h2>           <p>{props.product.price.toLocaleString("en-US", { style: "currency", currency: "USD" })} - {props.product.description}</p>       </div>   ) } export default Product 

在这里,当派生包含商品价格的属性时,该属性在组件中显示为props.product.price ,我们使用toLocaleString()方法来格式化商品的数量。

这就是VSCode中的应用程序项目。


VSCode中的应用

这是浏览器中的应用程序页面。


浏览器中的应用程序页面

注意商品价值的显示形式。

第23课。 TODO应用程序。 阶段数3


原创

在这里,我们将继续处理TODO应用程序,该应用程序在此处此处已处理。 特别是,在这里您将被要求应用有关组件列表动态形成的知识,以创建应用程序显示的待办事项列表。

▍工作


使用todosData.js案例todosData.js (其内容在下面给出),创建TodoItem组件列表, TodoItem此列表显示在App组件中。 请注意,您将需要修改TodoItem组件的代码,以便它可以显示传递给它的属性。

这是todosData.js文件的内容:

 const todosData = [   {       id: 1,       text: "Take out the trash",       completed: true   },   {       id: 2,       text: "Grocery shopping",       completed: false   },   {       id: 3,       text: "Clean gecko tank",       completed: false   },   {       id: 4,       text: "Mow lawn",       completed: true   },   {       id: 5,       text: "Catch up on Arrested Development",       completed: false   } ] export default todosData 

▍解决方案


这是App.js文件的代码:

 import React from "react" import TodoItem from "./TodoItem" import todosData from "./todosData" function App() {   const todoItems = todosData.map(item => <TodoItem key={item.id} item={item}/>)     return (       <div className="todo-list">           {todoItems}       </div>   ) } export default App 

这是TodoItem.js文件的代码:

 import React from "react" function TodoItem(props) {   return (       <div className="todo-item">           <input type="checkbox" checked={props.item.completed}/>           <p>{props.item.text}</p>       </div>   ) } export default TodoItem 

这是VSCode中的应用程序项目。


VSCode中的应用

应该指出的是,在完成本实践课程所提供的工作之后,尽管我们将为应用程序配备新功能,但我们仍会破坏其功能。 特别是,我们正在谈论标志的状态。 将检查使用props.item.completed属性设置为true的标志来设置状态,将使用相同属性设置为false的标志不选中。 但是,如果您单击应用程序页面上的标志,则不会发生任何事情,因为我们错误地配置了相应的HTML元素。 您可以在控制台中看到有关此的警告。


浏览器中的应用程序页面和控制台中的警告

稍后,我们将讨论表格并修复我们的培训应用程序,同时继续进行处理。

总结


在本课程中,您有机会练习创建组件文件,使用在创建组件实例时传递给组件实例的属性,以及使用标准的.map() JavaScript数组方法。 此外,在这里,我们继续致力于培训应用程序。 下次,我们将讨论基于类的组件。

亲爱的读者们! 您是否掌握了使用.map() JavaScript数组方法创建组件集的技术?

Source: https://habr.com/ru/post/zh-CN437988/


All Articles