Ошибка типа: this.props.postRecipes не является функцией

#javascript #reactjs #react-redux

#javascript #reactjs #реагировать-redux

Вопрос:

У меня возникла проблема с определением того, где исправить эту проблему. Короче говоря, я собрал действие / функцию выборки «post» для отправки данных формы в мой серверный сервер. После внесения нескольких исправлений в синтаксис я продолжаю получать эту ошибку «TypeError: this.props.postRecipes не является функцией». Кстати, я использую Redux с react.

Вот на что это указывает:

 componentDidMount(){
        
        this.props.postRecipes()
        
    }

 

Мне пришлось импортировать данные из моего каталога действий, который я создал в своем дереве файлов, где я создал свою функцию postRecipe().

 export const postRecipes=()=>{
    const BASE_URL = `http://localhost:10524`
    const RECIPES_URL =`${BASE_URL}/recipes`
    
    const config = {
        method: "POST",
        // body:JSON.stringify(recipes),
        headers: {
        "Accept": "application/json",
        "Content-type": "application/json"
     }
    }
    return(dispatch)=>{
        
    fetch(RECIPES_URL,config)
    .then(response => 
    response.json())
    .then(resp => {
        dispatch({
            type: 'Add_Recipe',
            payload:{
                name: resp.name,
                ingredients: resp.ingredients,
                chef_name: resp.chef_name,
                origin: resp.origin,
                catagoryId: resp.catagoryId 
            }
        })
    })
      .catch((error) => console.log.error(error))

    }
    
    
}
 

Вот мой компонент контейнера, в который я поместил свой метод жизненного цикла, который находится в центре внимания этого вопроса

 import React, { Component } from 'react'
import RecipeList from '../components/RecipeList'
import RecipeInput from '../components/RecipeInput'
import { connect } from 'react-redux'
import { postRecipes } from '../actions/fetchRecipes.js'

class RecipeContainer extends Component{
    constructor(props){
        super(props)
    }

    
    componentDidMount(){
        
        this.props.postRecipes()
        
    }

    render(){
        return (
            <div>
               <RecipeInput addRecipe={this.props.addRecipe} /> 
               <RecipeList recipes={this.props.recipes} deleteRecipe={this.props.deleteRecipe} />
            </div>
        )
    }

    

}

const mapStateToProps = state =>{
    return{
        recipes: state.recipes
    }
}


const mapDispatchToProps= dispatch =>{
    return{
    addRecipe: () => dispatch(postRecipes()),
    // deleteRecipe: id => dispatch({type: 'Delete_Recipe', id})
    }
}



export default connect(mapStateToProps,mapDispatchToProps)(RecipeContainer)
 

Кто-нибудь может определить, где это может привести к моей ошибке? Держу пари, что «this.props» в
this.props.postRecipes() появляется неопределенным после того, как я зарегистрировал его в консоли.

Комментарии:

1. На самом деле вы postRecipes нигде не присваиваете реквизит. Так addRecipe и должно быть postRecipes ?

2. На самом деле, похоже, что mapStateToProps во всем виноват лайк. Попробуйте добавить postRecipes туда функцию.

Ответ №1:

Измените это

 const mapDispatchToProps= dispatch =>{
    return{
    addRecipe: () => dispatch(postRecipes()),
    // deleteRecipe: id => dispatch({type: 'Delete_Recipe', id})
    }
}
 

к этому

 const mapDispatchToProps= dispatch =>{
    return {
       postRecipes: () => dispatch(postRecipes()),  
    }

}