क्या मैं Redux में MapStateToProps के बिनाDispatchToProps मैप कर सकता हूं?


92

मैं इसे समझने की कोशिश करने के लिए Redux के टूडू उदाहरण को तोड़ रहा हूं। मैंने पढ़ा कि mapDispatchToPropsआप प्रॉप्स के रूप में प्रेषण क्रियाओं को मैप करने की अनुमति देते हैं, इसलिए मैंने addTodo.jsडिस्पैच (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

पूरा रेपो यहां पाया जा सकता है

तो मेरा सवाल यह है कि क्या mapStispToProps के बिना mapDispatchToProps करना संभव है? क्या मैं एक स्वीकार्य अभ्यास करने की कोशिश कर रहा हूं - यदि नहीं, तो क्यों नहीं?

जवाबों:


144

हाँ तुम कर सकते हो। बस nullपहले तर्क के रूप में पास करें :

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

हां, यह सिर्फ स्वीकार्य अभ्यास नहीं है, यह कार्रवाई को ट्रिगर करने का तरीका है। उपयोग mapDispatchToPropsकरने से आपके प्रतिक्रिया घटकों के अंदर redux का उपयोग करने के तथ्य को छिपाने की अनुमति मिलती है


6
लेकिन क्या मैं बिना मैप के इस्तेमाल कर सकता हूं।
वेलिज़र आंद्रीव कितनोव

6
@VelizarAndreevKitanov हां
iofjuupasli

22
केवल उपयोग करते समय mapStateToProps, दूसरा तर्क को छोड़ सकता है connect। यह पास करने के लिए आवश्यक नहीं हैnull
TheUtherSide

1
बिना रिवर्स केस mapStateToProps के बिना mapDispatchToProps के लिए अशक्त होने की आवश्यकता नहीं है। केवल mapStateToProps पास करें
राजेश Nasit

2
connectतर्कों की सूची के बजाय एक ऑब्जेक्ट शाब्दिक को एक पैरामीटर के रूप में स्वीकार करना चाहिए।
महदी पेड्रम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.