React组件的三大属性

本文详细介绍了React中组件的状态管理,包括如何初始化和更新state,以及使用bind和箭头函数处理事件。同时,讲解了props的使用,强调其只读特性,并展示了如何设置props的类型限制和默认值。最后,探讨了refs的三种用法,包括字符串形式、回调函数形式以及createRef()方法,用于获取和操作DOM元素。
摘要由CSDN通过智能技术生成

一、state

class MyComponent extends React.Component {
        constructor(props) {
          // 固定写法
          super(props)

          // 初始化state
          this.state = { flag: true, manner: '你是对的' }

          // bind() 返回一个被指定当前this的新函数
          this.changeManner = this.changeManner.bind(this)
        }

        render() {
          const { flag, manner } = this.state
          return <h1 onClick={this.changeManner}>{flag ? manner : '我是错的'}</h1>
        }

        changeManner() {
          const flag = this.state.flag
          // state必须通过setState进行更新(指定值)
          this.setState({ flag: !flag })
        }
      }
      // 渲染虚拟DOM到页面
      ReactDOM.render(<MyComponent />, document.getElementById('test'))

简化形式

class MyComponent extends React.Component {
    state = { flag: true, manner: '你是对的' }

    changeManner = () => {
        const flag = this.state.flag
        // state必须通过setState进行更新(指定值)
        this.setState({ flag: !flag })
    }

    constructor(props) {
        // 固定写法
        super(props)
    }

    render() {
        const { flag, manner } = this.state
        return <h1 onClick={this.changeManner}>{flag ? manner : '我是错的'}</h1>
    }
}
// 渲染虚拟DOM到页面
ReactDOM.render(<MyComponent />, document.getElementById('test'))

二、props

注意:props是只读的

class Person extends React.Component {
    render() {
        const { name, age, sex } = this.props
        return (
            <ul>
                <li>姓名:{name}</li>
                <li>性别:{age}</li>
                <li>年龄:{sex}</li>
            </ul>
        )
    }
}

1、基本使用

(1)属性形式

ReactDOM.render(<Person name="ouyuming" age={19} sex="男" />, document.getElementById('test'))

(2)对象形式

const p1 = { name: 'lxying', age: 18, sex: '男' }
ReactDOM.render(<Person {...p1} />, document.getElementById('test2'))

2、属性限制

(1)引入prop-types.js

<script type="text/javascript" src="../js/prop-types.js"></script>

(2)propTypes

类属性,对传入的prop进行类型限制

PropTypes, 验证器类

static propTypes = {
    // 字符类型,必须传入
    name: PropTypes.string.isRequired,
    age: PropTypes.number,
    sex: PropTypes.string,
    // 函数类型
    study: PropTypes.func
}

(3)defaultProps

指定传入的prop默认值

static defaultProps = {
    sex: '男',
    age: 16
}

3、函数组件使用props

function Person(props) {
    const { name, age, sex } = props
    return (
        <ul>
            <li>姓名:{name}</li>
            <li>性别:{age}</li>
            <li>年龄:{sex}</li>
        </ul>
    )
}

Person.propTypes = {
    // 字符类型,必须传入
    name: PropTypes.string.isRequired,
    age: PropTypes.number,
    sex: PropTypes.string,
    // 函数类型
    study: PropTypes.func
}

Person.defaultProps = {
    sex: '男',
    age: 16
}

ReactDOM.render(<Person name="wanger" />, document.getElementById('test'))

三、refs

1、字符串形式的ref

class MyComponent extends React.Component {
    show1 = () => {
        const { input1 } = this.refs
        console.log(input1)
    }

    show2 = () => {
        const { input2 } = this.refs
        console.log(input2)
    }

    render() {
        return (
            <div>
                <input onBlur={this.show1} type="text" ref="input1" placeholder="input1" />
                <br />
                <input onBlur={this.show2} type="text" ref="input2" placeholder="input2" />
            </div>
        )
    }
}

ReactDOM.render(<MyComponent />, document.getElementById('test'))

2、回调韩式形式的ref

(1) 内联函数

在更新过程中它会被执行两次,第一次传入参数 null,然后第二次会传入参数 DOM 元素

show1 = () => {
    const { input1 } = this
    console.log(input1)
}

show2 = () => {
    const { input2 } = this
    console.log(input2)
}

render() {
    return (
        <div>
            <input onBlur={this.show1} type="text" ref={e => (this.input1 = e)} placeholder="input1" />
            <br />
            <input onBlur={this.show2} type="text" ref={e => (this.input2 = e)} placeholder="input2" />
        </div>
    )
}

(2) class 的绑定函数

show1 = () => {
    console.log(this.input1)
}

save = e => {
    this.input1 = e
    console.log(this.input1)
}

render() {
    return (
        <div>
            <input onBlur={this.show1} type="text" ref={this.save} placeholder="input1" />
        </div>
    )
}

3、createRef()

myRef1 = React.createRef()
myRef2 = React.createRef()

show1 = () => {
    console.log(this.myRef1.current)
}

show2 = () => {
    console.log(this.myRef2.current)
}

render() {
    return (
        <div>
            <input onBlur={this.show1} type="text" ref={this.myRef1} placeholder="input1" />
            <br />
            <input onBlur={this.show2} type="text" ref={this.myRef2} placeholder="input2" />
        </div>
    )
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: React中的三大属性是props、state和refs。\[1\] props是组件属性,可以通过this.props来访问。它可以用来传递数据给组件,并且可以对属性值进行类型限制和必要性限制。可以使用PropTypes来进行属性类型的限制,也可以设置默认属性值。\[1\] state是组件的状态,可以通过this.state来访问。它用于存储组件内部的数据,并且可以通过setState方法来更新状态。状态的改变会触发组件的重新渲染。\[2\] refs是用来标识组件内部标签的引用。它可以通过字符串形式或者React.createRef()来定义。通过refs可以获取到标签的真实DOM节点或者组件实例。\[3\] 这三大属性React中非常重要,可以帮助我们管理组件的数据和交互。 #### 引用[.reference_title] - *1* [react三大属性](https://blog.csdn.net/weixin_30617797/article/details/102410491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [React —— React组件三大属性(state,props,ref)](https://blog.csdn.net/Bonsoir777/article/details/127568414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值