当前位置: 首页 > news >正文

2023西安疫情最新消息通知评论优化

2023西安疫情最新消息通知,评论优化,网站建设社区交流,个人怎么做网站优化目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…

目录:

  1. react脚手架
  2. 创建项目并启动
  3. react脚手架项目结构
  4. 一个简单的Hello组件
  5. 样式的模块化
  6. 功能界面的组件化编码流程(通用)
  7. 组件的组合使用-TodoList  

1.react脚手架

  1. xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目
    1. 包含了所有需要的配置(语法检查、jsx编译、devServer…)
    2. 下载好了所有相关的依赖
    3. 可以直接运行一个简单效果
  2. react提供了一个用于创建react项目的脚手架库: create-react-app
  3. 项目的整体技术架构为:  react + webpack + es6 + eslint
  4. 使用脚手架开发的项目的特点: 模块化, 组件化, 工程化

2.创建项目并启动

  1. 全局安装:npm i -g create-react-app
  2. 切换到想创项目的目录,使用命令:create-react-app hello-react
  3. 进入项目文件夹:cd hello-react
  4. 启动项目:npm start

3.react脚手架项目结构

public ---- 静态资源文件夹

                        favicon.icon ------ 网站页签图标

                        index.html -------- 主页面

                        logo192.png ------- logo

                        logo512.png ------- logo

                        manifest.json ----- 应用加壳的配置文件

                        robots.txt -------- 爬虫协议文件

src ---- 源码文件夹

                        App.css -------- App组件的样式

                        App.js --------- App组件

                        App.test.js ---- 用于给App做测试

                        index.css ------ 样式

                        index.js ------- 入口文件

                        logo.svg ------- logo

                        reportWebVitals.js --- 页面性能分析文件(需要web-vitals库的支持)

                        setupTests.js ---- 组件单元测试的文件(需要jest-dom库的支持)

4.一个简单的Hello组件

Hello.jsx

import React, {Component} from 'react'
import './Hello.css'export default class Hello extends Component {render() {return <h2 className="title">hello,react!</h2>}
}

Hello.css

.title {background-color: orange;
}

Welcome.jsx

import React, {Component} from "react";
import './Welcome.css'export default class Welcome extends Component {render() {return <h2 className="demo">welcome</h2>}
}

Welcome.css

.demo {background-color: skyblue;
}

 App.js

import React from 'react'
import Hello from "./components/Hello/Hello";
import Welcome from "./components/Welcome/Welcome";export default class App extends React.Component {render() {return (<div><Hello></Hello><Welcome></Welcome></div>)}
}

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App/>);

 运行结果:

5.样式的模块化 

Hello.jsx

import React, {Component} from 'react'
import hellocss from './Hello.module.css'export default class Hello extends Component {render() {return <h2 className={hellocss.title}>hello,react!</h2>}
}

Hello.module.css

.title {background-color: orange;
}

 Welcome.jsx

import React, {Component} from "react";
import welcomecss from './Welcome.module.css'export default class Welcome extends Component {render() {return <h2 className={welcomecss.title}>welcome</h2>}
}

Welcome.module.css

.title {background-color: skyblue;
}

 运行结果:

6.功能界面的组件化编码流程(通用)

  1. 拆分组件: 拆分界面,抽取组件
  2. 实现静态组件: 使用组件实现静态页面效果
  3. 实现动态组件
    1. 动态显示初始化数据
      1. 数据类型
      2. 数据名称
      3. 保存在哪个组件?
    2. 交互(从绑定事件监听开始)

7.组件的组合使用-TodoList  

todoList案例相关知识点

  1. 拆分组件、实现静态组件,注意: className、style的写法
  2. 动态初始化列表,如何确定将数据放在哪个组件的state中?
    1. 某个组件使用放在自身的state中
    2. 某些组件使用:放在他们共同的父组件state中(官方称此操作为:状态提升
  3. 关于父子之间通信:
    1. 【父组件】给【子组件】传递数据:通过props传递
    2. 【子组件】给【父组件】传递数据:通过props传递,要求父提前给子传递
  4. 注意defaultchecked 和 checked的区别,类似的还有: defaultValue 和 value
  5. 状态在哪里,操作状态的方法就在哪里

 Footer.css

/*footer*/
.todo-footer {height: 40px;line-height: 40px;padding-left: 6px;margin-top: 5px;
}.todo-footer label {display: inline-block;margin-right: 20px;cursor: pointer;
}.todo-footer label input {position: relative;top: -1px;vertical-align: middle;margin-right: 5px;
}.todo-footer button {float: right;margin-top: 5px;
}

Footer.jsx

import React, {Component} from 'react';
import './Footer.css'class Footer extends Component {handleCheckAll = (event) => {this.props.checkAllTodo(event.target.checked)}handleClearAllDone = () => {this.props.clearAllDone()}render() {const {todos} = this.propsconst doneCount = todos.reduce((pre, current) => {return pre + (current.done ? 1 : 0)}, 0)const total = todos.lengthreturn (<div className="todo-footer"><label><input type="checkbox" onChange={this.handleCheckAll}checked={doneCount === total && total !== 0 ? true : false}/></label><span><span>已完成{doneCount}</span> / 全部{total}</span><button onClick={this.handleClearAllDone} className="btn btn-danger">清除已完成任务</button></div>);}
}export default Footer;

Header.css

/*header*/
.todo-header input {width: 560px;height: 28px;font-size: 14px;border: 1px solid #ccc;border-radius: 4px;padding: 4px 7px;
}.todo-header input:focus {outline: none;border-color: rgba(82, 168, 236, 0.8);box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}

Header.jsx

import React, {Component} from 'react';
import PropTypes from 'prop-types'
import {nanoid} from "nanoid";
import './Header.css'class Header extends Component {static propTypes = {addTodo: PropTypes.func.isRequired}handleKeyUp = (event) => {const {keyCode, target} = eventif (keyCode != 13) returnif (target.value.trim() == '') {alert('输入不能为空')return;}const todoObj = {id: nanoid(), name: target.value, done: false}this.props.addTodo(todoObj)target.value = ''}render() {return (<div className="todo-header"><input onKeyUp={this.handleKeyUp} type="text" placeholder="请输入你的任务名称,按回车键确认"/></div>);}
}export default Header;

Item.css

/*item*/
li {list-style: none;height: 36px;line-height: 36px;padding: 0 5px;border-bottom: 1px solid #ddd;
}li label {float: left;cursor: pointer;
}li label li input {vertical-align: middle;margin-right: 6px;position: relative;top: -1px;
}li button {float: right;display: none;margin-top: 3px;
}li:before {content: initial;
}li:last-child {border-bottom: none;
}

Item.jsx

import React, {Component} from 'react';
import './Item.css'class Item extends Component {state = {mouse: false}handelMouse = (flag) => {return () => {this.setState({mouse: flag})}}handleCheck = (id) => {return (event) => {this.props.updateTodo(id, event.target.checked)}}handleDelete = (id) => {if (window.confirm('确定删除吗?')) {this.props.deleteTodo(id)}}render() {const {id, name, done} = this.propsconst {mouse} = this.statereturn (<li style={{backgroundColor: mouse ? '#ddd' : 'white'}} onMouseEnter={this.handelMouse(true)}onMouseLeave={this.handelMouse(false)}><label><input type="checkbox" checked={done} onChange={this.handleCheck(id)}/><span>{name}</span></label><button onClick={() => {this.handleDelete(id)}}className="btn btn-danger"style={{display: mouse ? 'block' : 'none'}}>删除</button></li>);}
}export default Item;

List.css

/*main*/
.todo-main {margin-left: 0px;border: 1px solid #ddd;border-radius: 2px;padding: 0px;
}.todo-empty {height: 40px;line-height: 40px;border: 1px solid #ddd;border-radius: 2px;padding-left: 5px;margin-top: 10px;
}

List.jsx

import React, {Component} from 'react';
import PropTypes from "prop-types";
import Item from "../Item/Item";
import './List.css'class List extends Component {static propTypes = {todos: PropTypes.array.isRequired,updateTodo: PropTypes.func.isRequired,deleteTodo: PropTypes.func.isRequired}render() {const {todos, updateTodo, deleteTodo} = this.propsreturn (<ul className="todo-main">{todos.map((todo) => {return <Item key={todo.id} {...todo} updateTodo={updateTodo} deleteTodo={deleteTodo}></Item>})}</ul>);}
}export default List;

App.css

/*base*/
body {background: #fff;
}.btn {display: inline-block;padding: 4px 12px;margin-bottom: 0;font-size: 14px;line-height: 20px;text-align: center;vertical-align: middle;cursor: pointer;box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);border-radius: 4px;
}.btn-danger {color: #fff;background-color: #da4f49;border: 1px solid #bd362f;
}.btn-danger:hover {color: #fff;background-color: #bd362f;
}.btn:focus {outline: none;
}.todo-container {width: 600px;margin: 0 auto;
}.todo-container .todo-wrap {padding: 10px;border: 1px solid #ddd;border-radius: 5px;
}

App.js

import React, {Component} from 'react';
import './App.css'
import Header from "./components/Header/Header";
import Footer from "./components/Footer/Footer";
import List from "./components/List/List";class App extends Component {//初始化状态state = {todos: [{id: '001', name: '吃饭', done: true},{id: '002', name: '睡觉', done: true},{id: '003', name: '打代码', done: false},{id: '004', name: '逛街', done: true},]}addTodo = (todoObj) => {const {todos} = this.stateconst newTodos = [todoObj, ...todos]this.setState({todos: newTodos})}updateTodo = (id, done) => {const {todos} = this.stateconst newTodos = todos.map((todoObj) => {if (todoObj.id === id) {return {...todoObj, done: done}} else {return todoObj}})this.setState({todos: newTodos})}deleteTodo = (id) => {const {todos} = this.stateconst newTodos = todos.filter((todoObj) => {return todoObj.id !== id})this.setState({todos: newTodos})}checkAllTodo = (done) => {const {todos} = this.stateconst newTodos = todos.map((todoObj) => {return {...todoObj, done: done}})this.setState({todos: newTodos})}clearAllDone = () => {const {todos} = this.stateconst newTodos = todos.filter((todoObj) => {return !todoObj.done})this.setState({todos: newTodos})}render() {return (<div className="todo-container"><div className="todo-wrap"><Header addTodo={this.addTodo}></Header><List todos={this.state.todos} updateTodo={this.updateTodo} deleteTodo={this.deleteTodo}></List><Footer todos={this.state.todos}checkAllTodo={this.checkAllTodo}clearAllDone={this.clearAllDone}></Footer></div></div>);}
}export default App;

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App/>);

项目结构:

运行结果:

 


文章转载自:
http://wanjiaarousal.rymd.cn
http://wanjiadysteleology.rymd.cn
http://wanjiacolouring.rymd.cn
http://wanjiareactance.rymd.cn
http://wanjiaesne.rymd.cn
http://wanjiaeducable.rymd.cn
http://wanjiaskotophile.rymd.cn
http://wanjiaemblematic.rymd.cn
http://wanjiaavulse.rymd.cn
http://wanjiatomism.rymd.cn
http://wanjiaideaed.rymd.cn
http://wanjiarotisserie.rymd.cn
http://wanjiashrinkproof.rymd.cn
http://wanjianandin.rymd.cn
http://wanjiaacervate.rymd.cn
http://wanjiaparlor.rymd.cn
http://wanjiaemulsive.rymd.cn
http://wanjiahexabiose.rymd.cn
http://wanjiahydrogenization.rymd.cn
http://wanjiarepolish.rymd.cn
http://wanjiachoreic.rymd.cn
http://wanjiamisanthropize.rymd.cn
http://wanjiaosteoarthrosis.rymd.cn
http://wanjiatonstein.rymd.cn
http://wanjiaintimism.rymd.cn
http://wanjiamaterialise.rymd.cn
http://wanjiahomophone.rymd.cn
http://wanjiahypertonic.rymd.cn
http://wanjiabibliothetic.rymd.cn
http://wanjiaanimally.rymd.cn
http://wanjiabucketsort.rymd.cn
http://wanjiamindexpander.rymd.cn
http://wanjiacalicut.rymd.cn
http://wanjiarocky.rymd.cn
http://wanjiaserve.rymd.cn
http://wanjiaraceway.rymd.cn
http://wanjiahotelier.rymd.cn
http://wanjiacanteen.rymd.cn
http://wanjialinebacking.rymd.cn
http://wanjiaqbp.rymd.cn
http://wanjiacontredanse.rymd.cn
http://wanjiaauris.rymd.cn
http://wanjiaantiaircraft.rymd.cn
http://wanjiaasper.rymd.cn
http://wanjiapcav.rymd.cn
http://wanjiagunnel.rymd.cn
http://wanjiahoedown.rymd.cn
http://wanjiadistracted.rymd.cn
http://wanjiahindenburg.rymd.cn
http://wanjianeolith.rymd.cn
http://wanjiaheartsick.rymd.cn
http://wanjiachildminder.rymd.cn
http://wanjiasolanaceous.rymd.cn
http://wanjialowness.rymd.cn
http://wanjiadeckhead.rymd.cn
http://wanjiairreverent.rymd.cn
http://wanjiadaiquiri.rymd.cn
http://wanjiatiter.rymd.cn
http://wanjiacartel.rymd.cn
http://wanjiaplanned.rymd.cn
http://wanjiareproachless.rymd.cn
http://wanjiabibliolatrous.rymd.cn
http://wanjiahydroformate.rymd.cn
http://wanjiacurbside.rymd.cn
http://wanjiaeconomic.rymd.cn
http://wanjiaarquebusier.rymd.cn
http://wanjiainsulative.rymd.cn
http://wanjiadisremember.rymd.cn
http://wanjiakelter.rymd.cn
http://wanjiapaperbelly.rymd.cn
http://wanjiacomprehensively.rymd.cn
http://wanjiapsychoquack.rymd.cn
http://wanjiavesture.rymd.cn
http://wanjiaeddic.rymd.cn
http://wanjiaromanise.rymd.cn
http://wanjiasmithcraft.rymd.cn
http://wanjiacolcothar.rymd.cn
http://wanjiabanteng.rymd.cn
http://wanjiaautoerotic.rymd.cn
http://wanjiadepaint.rymd.cn
http://www.15wanjia.com/news/116924.html

相关文章:

  • 网站建设及第三方支付免费友情链接网
  • 网站开发建设付款方式天天外链
  • mvc4做网站五站内搜索工具
  • 网站优化是什么意思网站免费发布与推广
  • 开发公司委托物业管养绿化协议优化推广联盟
  • 学校网站建设app推广接单渠道
  • 做产品网站费用吗网页设计与制作软件有哪些
  • 做饰品网站seo专员工资一般多少
  • 外贸商城网站制作搜外seo
  • 网站科技感颜色推广链接
  • 青岛开发区网站建设中国纪检监察报
  • 网站的建设需要多少seo是什么的
  • 网站自身seo优化怎么做关键少数
  • 南昌网站开发培训中心百度提交收录
  • 网站哪个公司做的好网络推广怎么做才有效
  • 厦门做网站的公司企业营销策划方案
  • 葫芦岛公司做网站seo外包公司多少钱
  • 北京代做网站怎样优化网站排名
  • 官方网站怎么推广千万不要做手游推广员
  • 微信网站的好处外链免费发布平台
  • 360网站 备案网页设计培训教程
  • 做英语翻译赚钱的网站新手怎么开始做电商
  • vivo官方网站进入seo全网营销的方式
  • 茂名建设中专学校网站求个没封的网站2022
  • 广州正佳广场官网百度seo关键词报价
  • 2000个免费货源网站识万物扫一扫
  • 上海网络做网站公司网站链接查询
  • 蒙阴哪有做淘宝网站的百度seo关键词优化
  • 网站源码建站sem 优化软件
  • 赤峰市做网站多少钱搜索排名优化