首页 > 其他分享 >readme

readme

时间:2023-03-04 10:56:55浏览次数:30  
标签:render dom react msg state readme ReactDOM

第一阶段

react简单例子

引入cdn 关于 react ReactDOM babel
ReactDOM.render(dom,target,callback)
dom 不需要加引号,因为这个片段需要babel 也就是需要运行在`<script type="text/babel"><script>` 中
let APP1 = ReactDOM.createRoot(get('#app1'))  
let APP2 = ReactDOM.createRoot(get('#app2'))
可以选择根元素 可以有多个根元素,拿到之后,可以使用APP1.render() 用法和上边一样,一般一个应用程序只需要一个根

数据定义与函数绑定

react绑定变量可以通过 {} 单大括号进行 包括函数的绑定也是一样

绑定事件函数也是跟原生类似 onClick = {method}

//假设已经引入了React,ReactDOM和bebal
let msg = 'hello world!'
function changeMsg(){

    appRender()
}
let app = ReactDOM.createRoot(document.querySelector('#app'))
let appRender = () => app.render(<div><p>{msg}</p> <button onClick={changeMsg}>改变MSG</buttom></div>)
appRender()
//这里需要注意{}写在dom上 不需要引号
//changMsg传参还未提到

react 类-组件的写法

react中可以写一个类继承自 React.component,然后这个类内部可以写函数 方法 变量 然后再实现render方法 返回一个(dom)


class App extends React.Component{
    constructor(){
        //这里不要忘记调用下super哦,不然继承的那些变量方法无法使用
        super()
        this.state = {
            msg:'我是组件写法中的变量声明'
        }
        this.changeMsg = this.changeMsg.bind(this)
    }
    changeMsg(){
        请注意这个函数中的this在render函数渲染后默认指向的是undefined,因为是在严格模式下
        this.setState({
            msg:'我是组件写法修改后的变量'
        })
    }
    render(){
        return{
            <div>
            	<h1>{this.state.msg}</h1>
                <input name='button' type='button' value='修改数据' onClick={this.changMsg.bind(this)}/>
                //这里的bind(this)如果没写 那函数调用时的this将会时undefined
            </div>
        }
    }
    
}
ReactDOM.craeteRoot(document.querySelector('#app')).render(<App/>)
//这里就不需要重新调用render函数了 因为人家内部实现了 数据修改自动重新渲染
//=bind(this)如果没写 那函数调用时的this将会时undefined,也可使用箭头函数解决问题,也可在constructor中写

列表的展示方法

数组类型的放在dom中它会自己遍历 利用这个特性我们可以这样做

constructor(){
    this.state={
        movies: ['变形金刚', '王者归来', '指环王', '泡泡历险记']
    }
}
render(){
    return{
        <div>
            <ul>
                {this.state.movies.map((item,index)=><li key={item}>{item}</li>)}
                //这里会返回一个数组 数组元素都是dom ['<li>dom</li>','<li>dom</li>'],会被遍历
            </ul>
        </div>
    }
}

计数器案例

计数器案例可以复习前边所学

可以使用结构
   class Root extends React.Component {
      constructor() {
        super()
        this.state = {
          count: 0
        }
        console.log(this.increment);
        this.increment = this.increment.bind(this)
        this.decrement = this.decrement.bind(this)
      }
      increment(params) {

        //增加
        this.setState({
          count: this.state.count + 1
        })
      }
      decrement() {

        this.setState({
          count: this.state.count - 1
        })
      }
      render() {
        const { state: { count }, increment, decrement } = this
        return (
          <div>
            <h1>当前计数: {count}</h1>
            <button onClick={increment}>+++</button>
            <button onClick={decrement}>---</button>
          </div>
        )
      }
    }
    ReactDOM.createRoot(document.querySelector('#root')).render(<Root />)
 

JSX的注释与数据类型

{/**这就是注释**/} 在.jsx文件中 可以 'ctrl + /'

数据类型的展示中需要注意 object不可以直接展示,会报错;
要是想显示里边的内容 可以在{}中调方法; 例如: Object.keys(object)
null/undefined/true/false 不会显示 若要 请 toString
其他数据可以显示 数组的话会自动遍历 子元素规则同上
也可以使用表达式 isNaN ? 'ok':'no'
也可以抽成函数返回dom  (这里要说一下 直接调用是不需要绑定this的,因为它在自己的作用域中直接执行了)

react事件绑定 最优写法

<button onClick={(e) => this.decrement(e,999)}>其他写法</button>
//箭头函数写法 参数顺序和事件对象都没问题

react 属性绑定

直接写属性 值用大括号包裹变量 规则同js

react 条件渲染和列表渲染

//老规矩 假设基本框架代码已经存在
<h1>{isHidden.toString()} </h1> //因为布尔值 null undefined 在虚拟dom中显示空白

在逻辑代码中 可以使用短路语法 { isHidden || <h1>不隐藏</h1> }
                 
列表渲染也同理 可以使用高阶函数 并且利用数组的链式调用 完成一系列操作 
{ Moives.filter(item=>item.score>99).map(item=> (<h1>item.name</h1>)) }
                                                 
                                                 

注意事项

直接调用没有this指向问题,但赋给事件则会有 使用箭头函数调 顺便解决e的问题

第二阶段

react 脚手架

react的脚手架可以傻瓜式的生成一个react DEMO;

首先你要确保你安装了 react的脚手架 “ create-react-app 项目名称”

值得注意的是你需要确认你输入的没有大写字母 否则可能会出现意想不到的错误

第一个demo

流程与vue类似

//index.js
import ReactDOM  from "react-dom/client";
import App from './components/App'
const root = ReactDOM.createRoot(document.querySelector('#root'))
root.render(<App/>)

//app.jsx
import React from "react";
class App extends React.Component {
  constructor() {
    super()
    this.state = {
      msg: '我爱react'
    }
  }
  changeMsg(e){
    console.log(e);
    this.setState({
      msg:'卧槽 你也配'
    })
  }
  render(){
    let {msg} = this.state
    return(
      <div>
        <h1>{msg}</h1>
        <button onClick={(e)=>this.changeMsg(e)}>修改值</button>
      </div>

    )
  }
}
export default App

渲染结果:

标签:render,dom,react,msg,state,readme,ReactDOM
From: https://www.cnblogs.com/008ts/p/17177834.html

相关文章

  • README
    cherry-snippetv2版本介绍cherry-snippet是借助cherryTree笔记软件,制作的免费开源文本片段管理工具注:目前还处于beta版本,稳定版本cherry-snippetv1v1->v2改......
  • 关于github上README.md图片显示不出来的问题解决办法
    关于github上README.md图片显示不出来的问题解决办法出现原因:如果你的README文件内显示图片的路径是正确的,那么很有可能是因为DNS被污染了所以导致显示不正常,即无法访问存放......
  • tracer ftrace笔记(12)—— trace文档翻译与实验——README
    基于Linux-5.10.110一、翻译/sys/kernel/tracing#catREADMEtracingmini-HOWTO:#echo0>tracing_on//禁用trace的快速方法#echo1>tracing_on//重新启用tr......
  • readme-git
       https://blog.csdn.net/mChales_Liu/article/details/1043795261刚创建的idea项目和git联系忽略历史强制拉取gitpulloriginmaster--allow-unrelated-his......
  • Readme Driven Development
    原文链接名词解释RDD:ReadmeDrivenDevelopmentTDD:TestDrivenDevelopmentBDD:Behavior-DrivenDevelopmentXP:ExtremeProgrammingSCRUM:迭代式增量......
  • README
    山海个人笔记note所爱隔山海山海亦可平你只管做剩下的交给时间更新记录2022.10.1914:10tf-idf实现sanic服务框架实践pet-prompt解读kpt-prompt解读2022.1......
  • .MD语法入门,教你写好readme文档
    .md即markdown文件的基本常用编写语法,是一种快速标记、快速排版语言,现在很多前段项目中的说明文件readme等都是用.md文件编写的,而且很多企业也在在鼓励使用这种编辑方式,特......
  • Gitea 1.18 功能前瞻(其二):文件树导航、基于 YAML 格式创建的工单模板、在多种语言的 RE
    Gitea1.18的发布日期临近了,这里收集并展示了一些新版本中的前端界面新特性。1.我们在代码评审页面的侧边栏引入了树形结构的文件导模块当你打开合并请求-文件变动......
  • vueSource_README
    1.准备1.[].slice.call(lis):将伪数组转换为真数组2.node.nodeType:得到节点类型3.Object.defineProperty(obj,propertyName,{}):给对象添加/修改属性(指定描述符......
  • vueTest_README
    1.Vue.js是什么?1).一位华裔前Google工程师(尤雨溪)开发的前端js库2).作用:动态构建用户界面3).特点: *遵循MVVM模式 *编码简洁,体积小,运行效率高,移动/PC......