簡體   English   中英

mapStateToProps未定義狀態值?

[英]mapStateToProps undefined state value?

首先,我知道此代碼段中的很多內容已經關閉。 我只是想在這里解決這個問題。 由於某種原因,我的應用程序說它無法讀取未定義的屬性“ todo”,並在Form.js mapStateToProps方法中突出顯示了待辦事項:[... state.todos]。 我不是要輸入我應該在這里的東西嗎?

Form.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import uuidv1 from 'uuid';
import { addTodo } from '../actions';
import TodoInput from './todo-input';
import TodoList from './TodoList';

const mapDispatchToProps = dispatch => {
  return {
    addTodo: todo => dispatch(addTodo(todo))
  };
};

const mapStateToProps = (state) => ({
  todos: [...state.todos]
})

class ConnectedForm extends Component {
  constructor(props){
    super(props);
    this.state = {
      inputValue: ''
    }
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleToggle = this.handleToggle.bind(this);
  };

  handleChange = (e) => {
    e.preventDefault();
    this.setState({
      inputValue: e.target.value
    });
  }

  handleSubmit = (e) => {
    e.preventDefault();
    const { inputValue} = this.state;
    const id = uuidv1();
    this.props.addTodo({inputValue, id});
    this.setState({inputValue: ''});
  }

  handleToggle (e) {
    const id = parseInt(e.target.id);
    this.setState((prevState) => ({
      todos: prevState.todos.map(todo => todo.id === id ? {...todo, done: !todo.done} : todo)
    }));
    console.log(e.target);
  }

  render() {
    const { inputValue } = this.state;
    return (
        <div className='form-group'>
          <TodoInput
            value={inputValue}
            onChange={this.handleChange}
            onSubmit={this.handleSubmit}
          />

          <TodoList />
        </div>
    );
  }
}

const Form = connect(mapStateToProps, mapDispatchToProps) (ConnectedForm);

export default Form;

TodoList.js

import React, { Component } from 'react';
import TodoItem from './TodoItem';
import { removeTodo, toggleComplete } from '../actions';
import { connect } from 'react-redux';

const mapDispatchToProps = dispatch => {
  return {
      removeTodo: id => dispatch(removeTodo(id)),
      toggleComplete: isDone => dispatch(toggleComplete(isDone))
    };
  };

const mapStateToProps = state => {
  return {todos: [...state.todos]};
};

class List extends Component {
  render() {
    const mappedTodos = this.props.todos.map((todo, index) => (
      <TodoItem 
      todo={todo}
      title={todo.title}
      key={index}
      removeHandler={this.props.removeTodo}
      toggleComplete={this.props.toggleComplete}
      />
    ));
    return (
      mappedTodos
    );
  }
}

const TodoList = connect(mapStateToProps, mapDispatchToProps) (List)
export default TodoList; 

減速

import { ADD_TODO, REMOVE_TODO, TOGGLE_COMPLETE } from '../constants/action-types'; 
import uuidv1 from 'uuid';

const initialState = {
  todos: []
};

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case ADD_TODO:
    return {
        ...state,
        todos: [...state.todos,
          {
            title: action.payload.inputValue,
            id: uuidv1(),
            createdAt: Date(),
            priority: '',
            deadline: '',
            isComplete: false
          }]
    }

    case REMOVE_TODO:
    return {
      ...state,
      todos: [...state.todos.filter(todo => todo.id  !== action.payload)]
    }

    case TOGGLE_COMPLETE: 
    return (
      console.log(action.payload)
    )

    default:
      return state;
  }

首先,您的問題還不清楚,因為您沒有說出錯誤的確切來源,但總的來說,我可以在ConnectedForm classhandleToggle上看到,您正在嘗試遍歷prevState.todos 。在class的狀態下,您沒有任何todos屬性,您也不在class任何地方設置一個屬性。 因此,您嘗試訪問state實際上未定義的todo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM