programing

Redux에서 mapStateToProps를 사용하지 않고 mapDispatchToProps를 매핑할 수 있습니까?

yellowcard 2023. 3. 31. 21:59
반응형

Redux에서 mapStateToProps를 사용하지 않고 mapDispatchToProps를 매핑할 수 있습니까?

나는 이해하려고 Redux의 To do 예를 분해하고 있다.난 그걸 읽었다.mapDispatchToProps디스패치 액션을 소품으로 맵할 수 있기 때문에 다시 쓰기로 했습니다.addTodo.jsdispatch(addToDo)를 호출하는 대신 mapDispatchToProps를 사용합니다.내가 불렀어addingTodo(). 다음과 같은 경우:

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

let AddTodo = ({addingTodo}) => {
  let input;
  return (
      <div>
        <form onSubmit={e => {
          e.preventDefault()
          if (!input.value.trim()) {
            return
          }
          addingTodo(input.value)
          input.value = ""
        }}>
          <input ref={node => {
            input = node
          }} />
          <button type="submit">Submit</button>
        </form>
      </div>
  )
}

const mapDispatchToProps = {
  addingTodo: addTodo
}

AddTodo = connect(
  mapDispatchToProps
)(AddTodo)

export default AddTodo

그러나 앱을 실행하면 다음과 같은 오류가 나타납니다.Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.사용한 적이 없습니다.mapStateToPropsAddToDo 컴포넌트부터 시작해서 뭐가 문제인지 잘 몰랐어요.직감으로는 그렇다connect()예기하다mapStateToProps앞서다mapDispatchToProps.

작동 원고는 다음과 같습니다.

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">Submit</button>
        </form>
      </div>
  )
}

AddTodo = connect()(AddTodo)

export default AddTodo

완전한 레포는 이쪽에서 확인할 수 있습니다.

mapStateToProps 없이 mapDispatchToProps를 실행할 수 있을까요?제가 하고 싶은 일이 받아들여질 만한 일입니까?그렇지 않다면 왜 안 될까요?

네, 가능합니다.그냥 통과해null첫 번째 인수:

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

네, 이는 단순히 받아들일 수 있는 연습이 아니라 행동을 촉발하는 권장 방법입니다.사용.mapDispatchToProps반응 컴포넌트 내에서 리덕스를 사용하는 사실을 숨길 수 있습니다.

언급URL : https://stackoverflow.com/questions/47657365/can-i-mapdispatchtoprops-without-mapstatetoprops-in-redux

반응형