আমি কি রেডাক্সে ম্যাপস্টেটটোপ্রপস ছাড়াই ডিসপ্যাচটপপ্রোপগুলি ম্যাপ করতে পারি?


95

এটি বোঝার চেষ্টা করার জন্য আমি রেডাক্সের টুডো উদাহরণটি ছিন্ন করছি। আমি পড়েছি যা প্রপেশন mapDispatchToPropsহিসাবে প্রেরণ ক্রিয়াকলাপগুলিকে ম্যাপ করতে দেয়, তাই আমি addTodo.jsডিসপ্যাচ (অ্যাডডোডো ()) কল করার পরিবর্তে মানচিত্রডিস্পচটপোপ্রোপগুলি ব্যবহার করতে পুনরায় লেখার কথা ভাবি । আমি বলেছি 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.। আমি কখনই mapStateToPropsঅ্যাডটোডো উপাদানটি দিয়ে শুরু করতাম না , তাই আমি কী নিশ্চিত তা নিশ্চিত ছিল না। আমার অন্ত্র অনুভূতি বলে যে পূর্বে connect()প্রত্যাশা ।mapStateToPropsmapDispatchToProps

কাজের আসলটি দেখতে এই রকম:

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

সম্পূর্ণ রেপো এখানে পাওয়া যাবে

সুতরাং আমার প্রশ্নটি হ'ল ম্যাপস্টেটটোপ্রপস ছাড়াই কি ম্যাপডিস্পচটপোপ্রোপগুলি করা সম্ভব? আমি যা গ্রহণযোগ্য অনুশীলন করার চেষ্টা করছি তা যদি হয় না - তবে কেন হয় না?

উত্তর:


145

হ্যা, তুমি পারো. nullপ্রথম যুক্তি হিসাবে কেবল পাস করুন :

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

হ্যাঁ, এটি কেবল গ্রহণযোগ্য অনুশীলন নয়, ক্রিয়াগুলি ট্রিগার করার প্রস্তাব দেওয়া উপায়। ব্যবহার mapDispatchToPropsআপনার উপাদান প্রতিক্রিয়া ভিতরে redux ব্যবহারের সত্য আড়াল করার অনুমোদন দেয়


6
তবে আমি কী একইভাবে মানচিত্রডিসপচটপোপ্রপসগুলি ছাড়াই ম্যাপস্টেটটোপ্রপসগুলি ব্যবহার করতে পারি?
ভেলিজার অন্দ্রিভ কিতানোভ

6
@ ওয়েলিজারআন্দ্রিভ কিতানভ হ্যাঁ
আইওফজুপাসলি

23
শুধুমাত্র ব্যবহার করার সময় mapStateToProps, কেউ দ্বিতীয় যুক্তিটি বাদ দিতে পারে connect। এটি পাস করার প্রয়োজন নেইnull
উথারসাইড

4
বিপরীত ক্ষেত্রে ম্যাপস্টেটটোপ্রপসগুলি ম্যাপ ছাড়াই ডিসপ্যাচটপোপ্রোপগুলি নাল পাস করার দরকার নেই। কেবল মানচিত্রের স্টোপপ্রোপগুলি পাস করুন
রাজেশ নাসিত

4
connectআর্গুমেন্টের তালিকার পরিবর্তে কোনও বস্তুকে আক্ষরিক অর্থে প্যারামিটার হিসাবে গ্রহণ করা উচিত ছিল।
মাহদি পেদরাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.