React Redux -> Карта не является функцией?

#javascript #reactjs #redux #redux-persist

#javascript #reactjs #redux #redux-сохраняется

Вопрос:

Итак, я изучаю, как использовать redux и redux persist, и в настоящее время я застрял в проблеме прямо сейчас. Всякий раз, когда я пытаюсь сопоставить содержимое моего магазина, он выдает сообщение об ошибке, TypeError: tasks.map is not a function и я действительно не знаю, почему возникает проблема. Я поискал в Google и попытался отладить его, также пару раз пытался переписать код, но все было безрезультатно. Вот весь мой код: rootReducer.js

 import React from 'react'

let nextToDo = 0;
const task=[
    {
    }
]
const reducer =(state=task, action)=>
{
    switch(action.type)
    {
        case 'add':
            return[
                ...state,
                {
                    name: 'new',
                    id: nextToDo =1
                }
            ]
        default:
            return state;
    }
}


export default reducer
  

store.js

 import reducer from './rootReducer'
import {applyMiddleware,createStore} from 'redux'
import logger from 'redux-logger'
import {persistStore, persistReducer} from 'redux-persist'
import storage from 'redux-persist/lib/storage'

const persistConfig ={
    key: 'root',
    storage
}
export const persistedReducer = persistReducer(persistConfig, reducer)
export const store = createStore(persistedReducer, applyMiddleware(logger));
export const persistor = persistStore(store);

export default {store, persistor}
  

Index.js:

 import React, {Component} from 'react'
import {createStore} from 'redux'
import reducer from './rootReducer'
import 'bootstrap/dist/css/bootstrap.min.css'
import {Button} from 'react-bootstrap'
import {store} from './store'
import {connect} from 'react-redux'

class Index extends Component {
    render(){
    const {tasks} = this.props
    const add=()=>
    {
        store.dispatch(
            {
                type: 'add', 
            }
        )
    }
    store.subscribe(()=>console.log('your store is now', store.getState()))
    return (
        <div>
            {tasks.map(task=><div>{task.name}</div>)}
            <Button onClick={()=>add()}></Button> 
        </div>
    )
}
}
const mapStateToProps=(state)=>
{
    return{
        tasks: state
    }
}

export default connect(mapStateToProps)(Index)
  

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

1. Вы пробовали просто консоль. ведение tasks журнала перед его отображением?

2. Да, и это именно тот объект, который я хочу, чтобы он был, вот он: {0: {…}, count: 1, name: "new", _persist: {…}}

3. @Python_Mython79 {0: {…}, count: 1, name: "new", _persist: {…}} даже не является допустимым синтаксисом javascript и неясно, что это такое. Можете ли вы войти JSON.stringify(state) в mapStateToProps?

Ответ №1:

Попробуйте объявить состояние таким образом:

 state = {
  tasks: [{}]
}  

Затем, на Index.js , вы можете передать его реквизиту, сделав это:

 const mapStateToProps=(state)=>
{
    return {
        tasks: state.tasks
    }
}  

И использовать его внутри компонента с props.tasks

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

1. ну, когда я делаю это так, я получаю TypeError: не удается прочитать свойство ‘map’ неопределенного, но это явно не так, поскольку я ранее регистрировал задачи в коде, и оно не определено

2. попробуйте определить, действительно ли ваше состояние изменяется

3. Да, вы правы! Мне пришлось немного изменить редуктор, изменив состояние и там, большое вам спасибо!