Redux'te mapStateToProps olmadan mapDispatchToProps yapabilir miyim?


95

Redux'un yapılacaklar örneğini anlamaya çalışmak için parçalara ayırıyorum. mapDispatchToPropsSevk eylemlerini props olarak eşleştirmenize izin verdiğini okudum , bu yüzden addTodo.jsdispatch (addTodo ()) yerine mapDispatchToProps kullanmak için yeniden yazmayı düşündüm . Ben aradım addingTodo(). Bunun gibi bir şey:

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

Ben app çalıştırdığınızda, ancak, bu hatayı alıyorum: Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.. mapStateToPropsAddTodo bileşeniyle hiç başlamazdım, bu yüzden neyin yanlış olduğundan emin değildim. İçimdeki his diyor connect()beklediği mapStateToPropsönce gelmesi mapDispatchToProps.

Çalışan orijinal şuna benzer:

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

Tam depo burada bulunabilir .

Öyleyse sorum şu: mapStateToProps olmadan mapDispatchToProps yapmak mümkün mü? Kabul edilebilir bir uygulama yapmaya çalıştığım şey mi - değilse, neden olmasın?

Yanıtlar:


145

Evet yapabilirsin. Sadece geçen nullilk argüman olarak:

AddTodo = connect(
    null,
    mapDispatchToProps
)(AddTodo)

Evet, bu sadece kabul edilebilir bir uygulama değil, eylemleri tetiklemenin önerilen bir yolu. Kullanmak mapDispatchToProps, react bileşenlerinizin içinde redux kullanma gerçeğini gizlemeye izin verir


6
Ancak mapStateToProps'ı mapDispatchToProps olmadan da aynı şekilde kullanabilir miyim?
Velizar Andreev Kitanov

6
@VelizarAndreevKitanov yes
iofjuupasli

23
Yalnızca kullanırken mapStateToProps, ikinci argüman atlanabilir connect. Geçmek gerekli değilnull
theUtherSide

1
MapDispatchToProps içermeyen ters durumda mapStateToProps için null geçirmeye gerek yoktur. only pass mapStateToProps
Rajesh

2
connectbağımsız değişkenler listesi yerine parametre olarak bir nesne değişmezini kabul etmelidir.
Mahdi Pedram
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.