配置组件的 props (属性)

组件内部是通过 this.props 的方式获取到组件的参数的,如果this.props里面有需要的属性我们就采用相应的属性,没有的话就用默认的属性。

  1. class App extends React.Component{
  2. render(){
  3. console.log(this.props)
  4. return (
  5. <div className='app'>
  6. App
  7. </div>
  8. )
  9. }
  10. }

在使用一个组件的时候,可以把参数放在标签的属性当中,所有的属性都会作为props对象的键值:

  1. import React from 'react'
  2. class Btn extends React.Component{
  3. render(){
  4. console.log(this.props)
  5. return (
  6. <div className='btn'>
  7. <input type='button' value={this.props.name||'点击'} style={{color:this.props.color}} />
  8. </div>
  9. )
  10. }
  11. }
  12. class App extends React.Component{
  13. render(){
  14. console.log(this.props)
  15. return (
  16. <div className='app'>
  17. App <br />
  18. <Btn name='注册' color='teal' />
  19. <Btn name='登录' color='hotpink' />
  20. </div>
  21. )
  22. }
  23. }
  24. export default App

数字也当作变量用 {} 包起来

  1. import React from 'react'
  2. class Btn extends React.Component{
  3. render(){
  4. return (
  5. <div className='btn'>
  6. age:{this.props.tal}
  7. </div>
  8. )
  9. }
  10. }
  11. class App extends React.Component{
  12. render(){
  13. return (
  14. <div className='app'>
  15. <Btn tal={12} />
  16. </div>
  17. )
  18. }
  19. }
  20. export default App

propschildren属性

  1. import React from 'react'
  2. class Btn extends React.Component{
  3. render(){
  4. return (
  5. <div className='btn'>
  6. {this.props.children}
  7. </div>
  8. )
  9. }
  10. }
  11. class App extends React.Component{
  12. render(){
  13. console.log(this.props)
  14. return (
  15. <div className='app'>
  16. App <br />
  17. <Btn>
  18. <span>span标签</span>
  19. </Btn>
  20. </div>
  21. )
  22. }
  23. }
  24. export default App

注意children的类型会根据标签里的内容改变

function也可以通过props传递

通过ref获取子组件节点,通过props传递过去的方法修改state达成改变父组件状态

  1. import React from 'react'
  2. class Test extends React.Component{
  3. constructor(){
  4. super()
  5. this.state = {
  6. show:true
  7. }
  8. }
  9. handleShow(){
  10. this.setState({
  11. show:!this.state.show
  12. })
  13. }
  14. render(){
  15. return(
  16. <div>
  17. <p style={{display:this.state.show ? 'block':'none'}}>杀人诛心</p>
  18. <input type='button' value='点击' onClick={this.handleShow.bind(this)} />
  19. </div>
  20. )
  21. }
  22. }
  23. class Ref extends React.Component{
  24. handleClick(){
  25. this.test.handleShow()
  26. }
  27. render(){
  28. return(
  29. <div>
  30. <Test ref={test => this.test = test} onClick={this.handleClick.bind(this)}/>
  31. <input type='button' value='点' onClick={this.handleClick.bind(this)} />
  32. </div>
  33. )
  34. }
  35. }
  36. export default Ref

拓展应用

  1. class Btn extends React.Component{
  2. render(){
  3. let styles = {
  4. height:'25px',
  5. padding:'0 20px',
  6. lineHeight:'25px',
  7. color:this.props.color,
  8. background:this.props.bg,
  9. border:'0'
  10. }
  11. return (
  12. <div className='btn'>
  13. age:{this.props.tal}<br />
  14. <input type='button' value={this.props.name} style={styles} />
  15. </div>
  16. )
  17. }
  18. }
  19. Btn.defaultProps = {
  20. bg:'blue',
  21. color :'white',
  22. name:'点击',
  23. tal:20
  24. }

默认的propsdefaultProps 的属性设置

  1. class Btn extends React.Component{
  2. render(){
  3. return (
  4. <div className='btn'>
  5. age:{this.props.tal}<br />
  6. <input type='button' value={this.props.name}/>
  7. </div>
  8. )
  9. }
  10. }
  11. Btn.defaultProps = {
  12. name:'点击',
  13. tal:20
  14. }