Реагировать на встроенную Redux диспетчеризацию не является функцией, диспетчеризация является экземпляром Object - PullRequest
0 голосов
/ 22 октября 2018

Когда вызывается диспетчеризация, я получаю сообщение об ошибке - «диспетчеризация не является функцией ... диспетчеризация является экземпляром объекта». Я подключил mapDispatchToProps, и я не знаю, как это исправить (я новичок в реакции и редукции.) Вот мой код:

import React from 'react';
import {Text, View} from 'react-native';
import Slider from 'react-native-slider';
import { connect } from "react-redux";

class SliderComponent extends React.Component{
    constructor(props){
        super(props)

        this.state={
            sliderValue: this.props.val,
            type: this.props.sliderText,
        }
    }

    render(){
        return(
            <View style={{alignContent: 'center', flexDirection: 'row', padding: 10, justifyContent: 'center'}}>
                <Text style={{color: 'white', flex: 1, alignContent: 'center', justifyContent: 'center', fontSize: 20, fontWeight: 'bold'}}>{this.state.type}</Text>
                <Slider style={{width: 300, padding: 30, flex: 4}} thumbTintColor='white' step={1} value={this.state.sliderValue} minimumValue={this.props.min} maximumValue={this.props.max} minimumTrackTintColor='#F87883' onValueChange={val => {
                    this.setState({sliderValue: val})
                }
            }
            onSlidingComplete={ val =>
                this.props.changeSliderValue(this.state.type, this.state.sliderValue)
            }
            >
                    </Slider>
                <Text style={{color: 'white', flex: 1, alignContent: 'center', justifyContent: 'center', fontSize: 20, fontWeight: 'bold'}}>{this.state.sliderValue}</Text>
            </View>
        )
    }
};

const mapDispatchToProps = (dispatch) => {
    return{
        changeSliderValue: (type, value) => { dispatch({type: type, value: value}) }
    }
}

export default connect(
mapDispatchToProps
)(SliderComponent);

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

connect реализован неправильно, ваш фактический код -

const mapDispatchToProps = (dispatch) => {
  return {
    changeSliderValue: (type, value) => { 
      dispatch({type: type, value: value});
    }
  }
}

export default connect(mapDispatchToProps)(SliderComponent);

, но фактический синтаксис для соединения - 1-й параметр mapStateToProps functoin, а 2-й параметр - mapDispatchToProps.Пожалуйста, измените код подключения, как показано ниже.

const mapDispatchToProps = (dispatch) => {
  return {
    changeSliderValue: (type, value) => { 
      dispatch({type: type, value: value});
    }
  }
}

const mapStateToProps = (state) => null;

export default connect(mapStateToProps, mapDispatchToProps)(SliderComponent);
0 голосов
/ 22 октября 2018

Кажется, что добавление mapStateToProps заставило его работать ?

0 голосов
/ 22 октября 2018

В вашей функции mapDispatchToProps с использованием connect, 1-й параметр, на который вы ссылаетесь, является Redux store -объектом.

const mapDispatchToProps = (
  state,  // This is Redux state object
  dispatch,
) => {

https://gist.github.com/heygrady/c6c17fc7cbdd978f93a746056f618552

import { connect } from 'react-redux'

import { honk } from '../modules/goose/actions' // <-- action creator
import SomeButton from './SomeButton'

const mapStateToProps = undefined

const mapDispatchToProps = undefined // <-- we're focusing on this one

// hook the props of SomeButton to the redux store
const SomeButtonContainer = connect( // <-- create a container
  mapStateToProps,
  mapDispatchToProps
)(SomeButton) // <-- child component

export default SomeButtonContainer

Likeв этом примере 2-й параметр будет тем, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...