网站怎么添加广告代码,福建整站优化,做网站到底要不要备案,长春关键词排名推广组件
组件是用来实现局部功能的代码和资源的集合#xff08;html/css/js#xff09;#xff0c;用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数#xff0c;函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类#xff0c;类…组件
组件是用来实现局部功能的代码和资源的集合html/css/js用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类类式组件通过render函数返回视图内容。
函数式组件
function Good(){return divh1news/h1/div
}类式组件
类式组件必须继承React.Component
class Good extends React.Component{}React解析组件标签找到Good组件发现组件是使用类定义的随后new出来该类的实例并通过该类实例调用到原型上的render()将render返回的虚拟DOM转为真实DOM随后呈现在页面中
简单组件和复杂组件
如果一个组件有状态就是复杂组件如果一个组件没有状态就是简单组件。
组件实例的属性
组件实例属性包含state、props、refs这三个常用的属性。其中refs只能在类组件中使用如果在函数式组件中想要使用refs需要使用其他的api获取元素引用。
state
state是组件对象最重要的属性值是对象。组件被称为状态机通过更新组件的state来更新对应的页面显示。
状态必须通过setState修改setState()接收一个对象对象中设置需要更改的key和value。
class Demo extends React.Component{state {description:hello}handleClick(){this.setState({descriptin:hello}); }render(){return divspan{this.state.description}/spanbutton onClick{this.handleClick}change/button/div}
}props
组件实例属性props指的是从外部传递给组件的值props在组件内部是只读的不能通过this.props.xxx修改。
class Person extends React.Component{render(){const {name,age,sex} this.props;return ulli{name}/lili{age}/lili{sex}/li/ul/}
}我们可以通过propsTypes限制props的类型通过defaultProps设置props的默认值。propsTypes和defaultProps都是类的静态成员除了直接使用Person设置之外还可以通过类的语句块中通过static关键字设置。
// 限制props的类型
Person.propTypes {name:PropTypes.string,age:PropTypes.number,sex:PropTypes.string
}
// 设置props的默认值
Person.defaultProps {name:hello
}
// 向组件传递props
React.render(Person nameTom age{18} sexMan /,document.getElementById(app));
let p {name:Tom, age:18, sex:Man
}
React.render(Person {...p}/,document.getElementById(test));static关键字设置propsTypes
class Person extends React.Component{static propsTypes {name:PropTypes.string,age:PropTypes.number,sex:PropTypes.string}static defaultProps {name:hello}render(){return div// .../div}
}refs
组件实例属性refsrefs指的是获取元素的引用。通过给元素设置ref属性得到其引用。refs从使用方式上分为字符串类型、函数类型。字符串类型的如下所示
class Person extends React.Component{render(){return input refinput_left typetext placeholder点击按钮提示数据 /button onClick{this.tooltip}点击提示数据/buttoninput refinput_right typetext placeholder失焦提示数据 //}
}回调函数形式的refs
回调形式的ref在更新时会执行两次第一次会传递一个null第二次才会传递元素。这是因为在更新时会实例化一个新的对象并重新渲染。
回调函数分为内联的回调函数和类绑定的回调函数 class Person extends React.Component {state {}static propTypes {name: PropTypes.string,age: PropTypes.number,gender: PropTypes.string}static defaultProps {name: hello}constructor(props) {super(props);}tooltip (e){alert(this.input_left.value)}toolTipRight () {alert(this.input_right.value)}render() {return divinput ref{(el) {this.input_left el;}} typetext placeholder点击按钮提示数据 /button onClick{this.tooltip}点击提示数据/buttoninput ref{(el) {this.input_right el;}} onBlur {this.toolTipRight} typetext placeholder失焦提示数据 //div}}createRef的refs
除了上面的方式之外还可以通过createRef创建容器然后获取元素的引用。
class Person extends React.Component {myRef React.createRef()myRef2 React.createRef()state {}constructor(props) {super(props);}tooltip (e){console.log(this.myRef)alert(this.myRef.current.value);}toolTipRight () {alert(this.myRef2.current.value);}render() {return divinput ref{this.myRef} typetext placeholder点击按钮提示数据 /button onClick{this.tooltip}点击提示数据/buttoninput ref{this.myRef2} onBlur{this.toolTipRight} typetext placeholder失焦提示数据 //div}}事件处理
通过onXxx属性指定事件处理函数。
React使用的是自定义事件不是原生事件。为了更好的兼容性React中的事件是通过委托方式处理的。为了高效
通过event.target得到发生的事件的DOM元素对象
受控组件
页面中所有输入类的DOM随着输入把数据存入state就是受控组件。 class Login extends React.Component {state {userName:,password:}submit(e){e.preventDefault();const {userName,password} this.state;}saveFormData (key) {return (e) {this.setState({[key]: e.target.value});}}render() {return form action onSubmit{this.submit}用户名input ref{(el) this.userNameInput el} onChange{this.saveFormData(userName)} typetext nameusername /密码input ref{(el) this.passwordInput el} onChange{this.saveFormData(password)} typepassword namepassword / button登录/button/form}}