一、场景

在父组件显示数值,在子组件有个按钮点击后修改父组件的值。

二、代码

HTML

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. <script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.0-rc.0/umd/react.production.min.js"></script>
  10. <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/0.0.0-0c756fb-f7f79fd/umd/react-dom.production.min.js"></script>
  11. </head>
  12. <body>
  13. <div id="root"></div>
  14. </body>
  15. </html>

CSS

  1. .father {
  2. background: #000;
  3. }
  4. .son {
  5. background: #333;
  6. }

JSX

  1. function App(){
  2. return (
  3. <div>
  4. <Father/>
  5. </div>
  6. )
  7. }
  8. class Father extends React.Component{
  9. constructor(){
  10. super()
  11. this.state = {
  12. number: 0
  13. }
  14. }
  15. changeValue(){
  16. this.setState({
  17. number: this.state.number + 1
  18. })
  19. }
  20. render(){
  21. return (
  22. <div className="father">
  23. <div>{this.state.number}</div>
  24. <Son change={this.changeValue.bind(this)}/>
  25. </div>
  26. )
  27. }
  28. }
  29. class Son extends React.Component {
  30. constructor(){
  31. super()
  32. }
  33. render(){
  34. return (
  35. <div className="son">
  36. <button onClick={this.props.change}>更改值</button>
  37. </div>
  38. )
  39. }
  40. }
  41. render()
  42. function render(){
  43. ReactDOM.render(<App/>, document.querySelector('#root'))
  44. }

三、结论

在父组件声明一个函数,用于修改父组件中的值。
将此函数通过子组件的props进行传参

  1. <Son change={this.changeValue.bind(this)}>

子组件接收后,即可调用外部函数

  1. <button onClick={this.props.change}>更改值</button>

四、代码效果预览

预览链接