react中的函数组件

Hooks只能在函数组件中使用

-----为函数组件提供状态和生命周期

-----解决了类函数自身携带的问题,例如:同一业务的状态和业务逻辑被拆分到不同位置,

-----组件的状态逻辑复用问题

-----类组件不利于代码压缩和优化,也不利于TS的类型推导

Hooks渐进策略

Hooks和之前class的写法可以共存,没必要为了写Hooks而写Hooks

useState()基本使用(1)

作用:为函数组件提供状态和修改状态的方法

useState()可以是任意状态

const [list, setlist] = setState(0)
//此处的状态可以是任意值(例如:数组,字符串,对象等),类组件中的state必须为对象
render(
<div>
 <p>{list}</p>   
    <button onClick={()=>setlist(list+1)}>+1</button>
 </div>
)

useState()基本使用(2)

目前:useState只能在函数组件内部调用,所以返回的状态也是函数内部的局部变量

const [list, setlist] = setState(0)
//setlist()是一个函数调用,参数表示新的状态值,
//调用setlist()后,会返回一个新的状态值替换旧的状态值
//修改成功后会重新渲染
//状态的不可变性,要使用新的状态值替换旧的状态值,不要直接修改原状态

useState与组件更新过程

组件第一次渲染

1.调用函数式组件,从头开始执行组件中的业务逻辑

2.调用useState()将传入的参数作为初始状态值

3开始渲染组件

组件第2次渲染

1.点击按钮,调用setlist(list+1)来修改状态,因为状态发生改变,所以该组件会重新渲染

2.再次执行一遍组件中的业务逻辑代码

3.再次useState(0),这时拿到最新状态而不是初始值

...后面以此类推

注意:useState()的初始值只会在组件第一次生效

useState另一种写法

useState(()=>{
    return 初始值
})
//如果状态通过一些计算得到时使用

useState不能在函数,if for里面写

useEffect副作用

----比如:手动修改DOM,AXJA请求,本地存储

执行时机:初始化时和数据变化的时候执行

相当于类中的componentDidMount + componentDidUpdate。

import React, { useState, useEffect } from 'react'
​
const App = () => {
    const [count, setCount] = useState(() => 0)
    useEffect(() => {
        // 1. 初始化时执行
        // 2. 数据变化的时候执行
        document.title = count
    })
    return (
        <div>
            <p>{count}</p>
            <button onClick={() => setCount(count + 1)}>click</button>
        </div>
    )
}
​
export default App

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于函数组件,你可以将父组件的图片路径作为props传递给子组件,然后在子组件使用<img>标签来显示图片。下面是一个示例代码: 父组件: ```javascript import React from 'react'; import ChildComponent from './ChildComponent'; function ParentComponent() { const imagePath = 'path/to/image.jpg'; return ( <div> <ChildComponent imagePath={imagePath} /> </div> ); } export default ParentComponent; ``` 子组件: ```javascript import React from 'react'; function ChildComponent(props) { return ( <div> <img src={props.imagePath} alt="example" /> </div> ); } export default ChildComponent; ``` 在上面的代码,父组件定义了一个名为imagePath的变量,并将其作为props传递给了子组件ChildComponent。在子组件,使用<img>标签显示了图片,其src属性设置为父组件传递的imagePath变量。注意,在函数组件,props是作为函数参数传递的,因此在子组件,需要使用props.imagePath来访问父组件传递的图片路径。 ### 回答2: 在React,父组件想要向子组件传递图片,可以通过props属性来实现。 首先,在父组件准备好需要传递的图片,并将其作为属性传递给子组件。可以通过src属性来指定图片的路径,然后在父组件的render()函数将该属性传递给子组件。 子组件需要在函数组件的参数接收父组件传递过来的属性,可以通过解构赋值的方式将传递的图片属性提取出来。然后在子组件可以通过img标签的src属性来显示父组件传递的图片。 下面是一个示例代码: 父组件: ```jsx import React from 'react'; import ChildComponent from './ChildComponent'; import image from './image.jpg'; // 导入图片 function ParentComponent() { return ( <div> {/* 将图片属性传递给子组件 */} <ChildComponent image={image} /> </div> ); } export default ParentComponent; ``` 子组件: ```jsx import React from 'react'; function ChildComponent(props) { // 接收父组件传递的图片属性 const { image } = props; return ( <div> {/* 显示父组件传递的图片 */} <img src={image} alt="图片" /> </div> ); } export default ChildComponent; ``` 以上代码,父组件通过将图片属性传递给子组件,子组件则接收并显示传递过来的图片。这样就实现了父组件向子组件传递图片的功能。 ### 回答3: 在React,可以通过props属性将数据从父组件传递给子组件。当需要传递图片时,可以通过以下步骤实现: 1. 在父组件引入图片,并将其作为变量或文件路径保存。 2. 在父组件创建一个函数组件,并将图片作为props属性传递给子组件。 例如,假设在父组件有一张名为"image.png"的图片,可以按照以下方式传递给子组件: ```jsx // 父组件 import React from 'react'; import ChildComponent from './ChildComponent'; import image from './image.png'; function ParentComponent() { return ( <div> <ChildComponent image={image} /> </div> ); } export default ParentComponent; ``` 在父组件,我们将图片作为props属性传递给了子组件,并赋值给了名为"image"的变量。 接下来,在子组件可以通过props属性来访问该图片并进行渲染,例如: ```jsx // 子组件 import React from 'react'; function ChildComponent(props) { return ( <div> <img src={props.image} alt="图片" /> </div> ); } export default ChildComponent; ``` 在子组件,我们可以使用props属性来获取父组件传递的图片,并将其作为src属性值来渲染在页面上。 通过以上步骤,父组件就可以向子组件传递图片了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值