Вызов действия создателя внутри функции.Ошибка: у действий не может быть неопределенного свойства "type"? - PullRequest
1 голос
/ 28 июня 2019

Я знаю, что создатель действия должен иметь тип свойства только тогда, когда он сможет отправлять.Поскольку у меня есть вызов функции, который в конечном итоге приводит к одному создателю действия, обладающему свойством типа, то Почему это показывает мне эту проблему.

Когда я попытался отправить диспетчер запуска запуска игры напрямую, он работает, но, поскольку мне нужно было реализовать в них еще какую-то функцию, я нуждался в ней.Как реализовать то же самое?

Menu.js
import React, { Component } from 'react';
import {connect} from 'react-redux';
import {startGame} from '../actions';
import {loadMenu} from '../actions';
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
const page_Banner={
    marginTop:'35px',
    fontSize:'45px',
    textAlign:'center',
    letterSpacing:'20px',
    fontWeight:'bold'
};
const spacebar_screen={
    marginTop:'35px',
    color:'grey'
}

class Menu extends Component {
    componentDidMount() {
        this.props.dispatch(loadMenu());
        console.log(this.props.dispatch);  
        console.log(this.props.isPlaying);
    }
    render() {
        return (
            <div style={page_Banner}>
                Redux    Tetris
                {!this.props.isPlaying?<h2 style={spacebar_screen}>Press spacebar to start the game</h2>:null}    
            </div>
        )   
    }
}
Menu.propTypes={
    isPlaying:PropTypes.bool,
}
// function mapDispatchToProps(dispatch){
//     return bindActionCreators({loading:loadMenu},dispatch);
// }
const mapStateToProps = (state) => ({
    isPlaying: state.gameStatus.currentState !== 'IDLE',
});
export default connect(mapStateToProps)(Menu);




Action.js
import constants from "../gameConstants/constants";
export const startGame=()=>{
    const ShapeMapping=constants;
    const current_Shapeno=Math.floor(Math.random()*7);
    const next_Shapeno=Math.floor(Math.random()*7);
    const current_Shape=ShapeMapping[current_Shapeno];
    const next_Shape=ShapeMapping[next_Shapeno];
    return {
        type:"START_GAME",
        current_Shape,
        next_Shape
    };
}
export const pauseGame = () => ({
    type: "PAUSE_GAME",
});
export const unpauseGame = () => ({
    type: "UNPAUSE_GAME",
});
export const gameOver = () => ({
    type: "GAME_OVER",
});
export const loadMenu=()=>({
    function(dispatch,getState){
        function handleSpacebar(event){
            if(event.keyCode==32){
                dispatch(loadGame());
                window.removeEventListener('keyup',handleSpacebar);
                console.log('here')
            }
        }
        window.addEventListener('keyup',handleSpacebar);
    }
})
export const loadGame=()=>({
    function (dispatch,getState){
        dispatch(startGame());
    }
})


1 Ответ

0 голосов
/ 28 июня 2019

Проблема в loadMenu и loadGame создателях действий. Вы возвращаете объект с анонимной функцией, которая не имеет никакого смысла. Создатель действия должен вернуть объект с type и минимальными данными для определения действия и вернуть функцию, если вы используете redux-thunk.

Сохраняйте действия создателей в чистоте, как вы делали в gameOver, и обрабатывайте все остальное в редукторах или с помощью паттерна pub / sub / redux.

См. Этот ответ Дана Абрамова https://github.com/reduxjs/redux/issues/787

...