ref和redux在react-redux中引用了什么?

man*_*ain 8 ref ecmascript-6 reactjs redux react-redux

我正在学习文档中的 react-redux,并且没有看到以下内容.参考部分指的是什么?和节点?从我看到的那个地方都没有使用这个参考.引用后,引用是否引用DOM上的子组件节点(输入)?如果是这样,为什么不直接参考输入?

import React from 'react'
import { connect } from 'react-redux'
import { addTodo } from '../actions'

let AddTodo = ({ dispatch }) => {
  let input

  return (
    <div>
      <form onSubmit={e => {
        e.preventDefault()
        if (!input.value.trim()) {
          return
        }
        dispatch(addTodo(input.value))
        input.value = ''
      }}>
        <input ref={node => {
          input = node
        }} />
        <button type="submit">
          Add Todo
        </button>
      </form>
    </div>
  )
}
AddTodo = connect()(AddTodo)

export default AddTodo
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 6

这是一个ref回调属性,其目的是获得对DOM元素/类组件的"直接访问".使用ref你可以focus输入框,直接获取它的值或访问类组件的方法.

在这种情况下,它的目的是通过为输入变量(the let input)分配引用来获取/更改输入的值- 请参阅代码中的注释.

let AddTodo = ({ dispatch }) => {
  let input // the input variable which will hold reference to the input element

  return (
    <div>
      <form onSubmit={e => {
        e.preventDefault()
        if (!input.value.trim()) { // using the input variable
          return
        }
        dispatch(addTodo(input.value)) // using the input variable
        input.value = ''
      }}>
        <input ref={node => {
          input = node // assign the node reference to the input variable
        }} />
        <button type="submit">
          Add Todo
        </button>
      </form>
    </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你只想要redux存储中的值,你可以这样做 - `<input onChange = {(e)=> dispatch(addTodo(e.target.value))}`. (3认同)
  • @mangocaptain的好处是你可以通过ref访问表单提交的输入.您将如何访问表单提交中的输入? (2认同)