zoukankan      html  css  js  c++  java
  • html中使用react,及ref操作

    <!DOCTYPE html>
    <html lang="en">
     
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
     
    <body>
      <div id="app"></div>
    </body>
    </html>
      <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
      <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
      <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
      <script src="https://cdn.bootcss.com/prop-types/15.6.1/prop-types.js"></script>
      <script type="text/babel"> // 使用jsx语法
        class App extends React.Component {
          constructor (props) {
            super(props);
            this.state = {
              todoList: ['11', '22', '33']
            };
            this.addTodo = this.addTodo.bind(this)
          }
          addTodo (todo) {
            const {todoList} = this.state
            todoList.unshift(todo)
            this.setState({ todoList })
          }
          render() {
            const { todoList } = this.state;
            return (
              <div>
                Example
                <Add count={ todoList.length } addTodo={ this.addTodo }/>
                <List todoList={ todoList }/>
              </div>
            )
          }
        }
        class Add extends React.Component {
    
          constructor(props) {
            super(props);
            this.add = this.add.bind(this)
          }
    
          add() {
            const todo = this.todoInput.value.trim();
            if(!todo) return
            this.props.addTodo(todo)
            this.todoInput.value = ''
          }
    
          fnRef (input) {
            // 将 input元素 指定给todoInput
            return this.todoInput = input
          }
    
          render() {
            return (
              <div>
                {/* ref写法一 */}
                {/*
                  <input type="text" ref={input => this.todoInput = input} />
                */}
    
                {/* ref写法二 */}
                <input type="text" ref={this.fnRef.bind(this)} />
    
                <button onClick={ this.add }>add #{this.props.count + 1}</button>
              </div>
            )
          }
        }
    
        Add.propTypes = {
          count: PropTypes.number.isRequired,
          addTodo:PropTypes.func.isRequired
        }
    
        class List extends React.Component {
    
          render() {
            const { todoList } = this.props
            return (
              <ul>
                {todoList.map((todo, key) => (<li key={key}>{todo}</li>))}
              </ul>
            )
          }
    
        }
    
        List.propTypes = {
          todoList: PropTypes.array.isRequired
        }
        
        ReactDOM.render(<App />, document.getElementById('app'));
      </script>

    注意: react并不推荐过度使用ref,如果能通过state做到的事情,就不应该使用 refs 在你的 app 中“让事情发生”。
    过度使用ref并不符合数据驱动的思想

  • 相关阅读:
    判断DataSet为空
    msxml3.dll 错误 '800c0008'
    google Map api地理位置坐标转换
    C# .net中cookie值为中文时的乱码解决方法
    windows pear 安装
    smarty2 设置、变量、函数
    简单模板类
    mysql 1366 插入错误
    Oracle修改账户口令
    C# Winform验证码
  • 原文地址:https://www.cnblogs.com/-roc/p/14889443.html
Copyright © 2011-2022 走看看