Вставка задачи и перенаправление в другой компонент - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь вставить задачу. Например, {"name": "todo 1", "description": "selling"}, и я хочу видеть, когда я нажимаю в create, '/ todos / 89324njhe3uj / show', но реальный результат - '/ todos /undefined/show'.

Проблема не в бэкэнде, возможно, в передней стороне.

Это мой пост Todo:

 app.post('/api/todos', async (req, res) => {

     const { name, description} = req.body;

       const todo = new Todo({name, description});


    try {
      let newTodo = await todo.save();

      res.status(201).send(newTodo);
    } catch (err) {
      if (err.name === 'MongoError') {
        res.status(409).send(err.message);
      }

     res.status(500).send(err);
      }
     });

Теперь давайте посмотрим спереди конец. TodoForm.jsx

class TodoForm extends Component {
  componentWillReceiveProps = nextProps => {
    // Load Contact Asynchronously
    const { todo } = nextProps;
    if (todo._id !== this.props.todo._id) {
      // Initialize form only once
      this.props.initialize(todo);
      this.isUpdating= true;
    }
  };

render() {
    const { handleSubmit, loading } = this.props;

    if (loading) {
      return <span>Loading...</span>;
    } 

    return (
       <form onSubmit={handleSubmit}>
         <Field
          name='name'
          type='text'
          component={TextField}
          placeholder='...name'
          label='Name'
        />
        <Field
          name='description'
          rows='8'
          component={TextArea}
          placeholder='...description'
          label='Description'
        />

 <Link className='btn btn-light mr-2' to='/todos'>
          Cancel
        </Link>
        <button className='btn btn-primary mr-2' type='submit'>
          {this.isUpdating ? 'Updating' : 'Creating'}
        </button>
      </form>
    );
  }
}

export default reduxForm({ form: 'todo', validate: validations })(
  TodoForm
);

И мой NewTodo.jsx

 import React, { Component } from 'react';

import { connect } from 'react-redux';
import { Redirect } from 'react-router';
 import { SubmissionError } from 'redux-form';
import { newTodo, saveTodo } from '../../actions/TodoActions';
 import TodoForm from './TodoForm';

class NewTodo extends Component {
  state = {
    redirect: false
  };

  componentDidMount() {

    this.props.newTodo();
  }

  submit = todo => {
    return this.props
      .saveTodo(todo)
      .then(response => this.setState({ redirect: true }))
      .catch(err => {
        throw new SubmissionError(this.props.errors);
      });
  };

  render() {
       const {id} = this.props.match.params;
    return (
      <div>
        <h2>New Todo</h2>

        {this.state.redirect ? (
          <Redirect to= {{pathname: `/todos/${this.props.todo.state.id}/show`, state: {id: this.id}}} />
        ) : (
          <TodoForm todo={this.props.todo} onSubmit={this.submit} />
        )}
      </div>
    );
  }
}

function mapStateToProps(state) {
   return {
    todo: state.todosDs.todo,
     errors: state.todosDs.errors
  };
}

export default connect(
  mapStateToProps,
  { newTodo, saveTodo }
)(NewTodo);

Я использую два маршрута во внешнем интерфейсе: '/ todos / new' -> NewTodo и '/ todos / : id / show '-> ShowTodo. Мое приложение не использует какой-либо маршрут в New Todo. В New Todo я должен заполнить форму, соответствующую TodoForm, и нажать кнопку создания, что является отправкой. Я нажимаю кнопку «Отправить», и он перенаправляет меня на «/ todos /: id / show». ожидаемый вывод: '/ todos / 43jui31423j4j32 / show', но реальный вывод - '/ todos / undefined / show'.

Дополнительная информация о проблеме: Перенаправление на другой компонент с передачей параметра id props по URL

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