欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > react概念篇

react概念篇

2024/12/25 18:09:23 来源:https://blog.csdn.net/weixin_51666715/article/details/144600937  浏览:    关键词:react概念篇

jsx

定义

jsx 又称JavaScript xml(xml一般指的是可扩展编辑语言)
jsx是react提供的语法糖,能让我们在JS中写HTML

语法

只有一个根元素
使用js变量时,用插值表单式 {}
dom元素的class改为了className( className={‘div ’+active? ‘action’ : ’ '} )

类组件

组件比是大写字母开头
构建函数是可选的(constructor 可以必写)
this.state 是状态
有生命周期函数
有this,在使用函数时注意this指向问题

react指向问题

问题:JS原有this指向问题
解决:可用bind来改变this指向

函数组件

function 定义组件:
1.没有生命周期
2.没有this
3.没有状态(可以用hooks来解决)

jsx扩展

jsx是js语法扩展,可以使用我们类似于HTML的形式去使用JS

jsx最终需要转换成JS代码。
babel将es6转化为es5,让更多浏览器支持

react作用

react 监听用户数据的更新,帮助我们去渲染视图。
render()函数实现了dom渲染的过程,这个过程我们可以分为两个阶段:
1.获取虚拟dom(jsx经过babel转义后的对象)
2.将虚拟dom转化为真实dom并插入到HTML文档中

react生命周期

定义:react从挂载到卸载的过程,我们称这个过程为react生命周期

react的生命周期分为三个阶段: 挂载、更新、卸载

react 生命周期函数

定义: react在生命周期过程中,自动执行的一些函数,我们称这些函数为生命周期函数(钩子函数)

挂载阶段(当组件实例被创建并插入到dom中)

在react类组件中,挂载之前会调用他的构建函数constuctor()
(1)、所有的state都是来自于props
static.getDrivedStatFromProps
(2)、render
(3)、componentDidMount 会在组件挂载后(插入dom树中)立即调用,网络请求可以放在这个阶段

更新阶段

render()
更新阶段执行生命周期函数 componentDidUpdate

卸载阶段(组件从dom树被移除)

卸载阶段生命周期函数 componentWillUnMount

组件

因为react是单向数据流,值的传递是通过props传递(父组件传递数据给子组件,子组件通过父组件自定义的方法来修改父组件的状态)

组合组件(组件嵌套)

父子组件

父传子

函数组件: 通过props传递

例:

function FunctionComponent(props) {console.log('函数组件',props);return ( <div>函数组件</div>);
}import FunctionComponent from "./functionComponent";
function App() {const name = '李四'return ( <div><h1>函数组件</h1><FunctionComponent props={name}/></div>);
}export default App;

子传父

import { Component } from "react";
function FunctionComponent(props) {console.log('函数组件',props);return ( <button onClick={props.props.addClick}>加一</button>);
}class App extends Component {constructor(props) {super(props);}state = { number: 1}render() { return ( <div>组件: {this.state.number}<FunctionComponent props={{'number' : this.state.number,'addClick' : this.addClick.bind(this)}}/></div>);}addClick(){this.setState({number: this.state.number+1})}
}export default App;

兄弟组件

传参

因为单向数据流,组件之间的通信是通过props层层传递的,太麻烦了,所以出现了context对象(相当于全局变量)
例:

import { Component, createContext, useContext } from "react";
const ValueContext = createContext();
function Son(props) {const {state} = useContext(ValueContext)return (<div>子组件{state.name}</div>)
}function Father(props) {const {state} = useContext(ValueContext)return ( <div>父组件{state.name}<Son props={props.props}/></div>);
}class App extends Component {constructor(props) {super(props);}state = { name: '李三'}render() { return ( <div>组件通信<ValueContext.Provider value={{state:this.state}}><Father props={this.state.name}/></ValueContext.Provider></div>);}
}export default App;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com