【问题标题】:Refreshing Component and not all view with react刷新组件而不是所有视图都带有反应
【发布时间】:2019-07-06 23:23:45
【问题描述】:

我已经在学习使用 react 从 REST API 获取数据,我必须从父组件(应用程序)召唤组件(提交表单和获取数据的卡片),并且正在工作,所以我必须推送新的todo to db 并获取我的卡片组件上的新闻值,但只渲染卡片组件,渲染所有应用程序(包括表单组件),我做错了什么?

这是父组件

import React, { Component } from 'react';
import './App.css';
import SampleCard from './components/SampleCard';
import Form from './components/Form';

class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      data: []
    }
  }

  componentDidMount() {
    this.getTasks()
  }

  getTasks =_=> {
    fetch('http://localhost:4000/users')
    .then(response => response.json())
    .then(data => this.setState({ data: data.data }))
    .catch(err => console.log(err))
  }

  render() {

    return (
      <div>
        <form onSubmit={this.getTasks}>
        <Form />
        </form>
        {this.state.data.map((row, i) => (
          <div key={i}>
            <SampleCard row={row} />
          </div>
        ))}
      </div>

    )
  }


}

export default App;

这个,表单组件

import React, { Component } from "react";

class Form extends Component {

    constructor(props) {
        super(props);
        this.state = {
            tasks: {
                task: '',
                status: ''
            }
        }
    }

    addTask = _ => {
        const { tasks } = this.state
        fetch(`http://localhost:4000/users/add?task=${tasks.task}&status=${tasks.status}`)
        .catch( err => console.log(err))
    }

    render() {
        const { tasks } = this.state
        return (
            <div className="Form container mt-3">
                <div className="input-group mb-3">
                    <div className="input-group-prepend">
                        <span className="input-group-text" id="basic-addon1">
                            Define Task!
                        </span>
                    </div>
                    <input
                        type="text"
                        value={tasks.task}
                        onChange={e => this.setState({ tasks: { ...tasks, task: e.target.value } })}
                        className="form-control"
                        placeholder="Task"
                        aria-label="Task"
                        aria-describedby="basic-addon1"
                    />
                </div>
                <div className="input-group mb-3">
                    <div className="input-group-prepend">
                        <span className="input-group-text" id="basic-addon1">
                            Define Status!
                        </span>
                    </div>
                    <input
                        type="text"
                        value={tasks.status}
                        onChange={e => this.setState({ tasks: { ...tasks, status: e.target.value } })}
                        className="form-control"
                        placeholder="Status"
                        aria-label="Status"
                        aria-describedby="basic-addon1"
                    />
                </div>
                <button 
                type="Submit" 
                className="btn btn-outline-success d-flex mr-auto"
                onClick={this.addTask}
                >
                Add
                </button>
            </div>
        );
    }
}

export default Form;

这是卡片组件

import React, { Component } from "react";

export default class SampleCard extends Component {


  render() {
    return (
      <div className="container pt-5">
        <div className="col-xs-12">
          <div className="card">
            <div className="card-header">
            <h5 className="card-title">{this.props.row.task}</h5>
            </div>
            <div className="card-body">
              <h4 className="card-title">{this.props.row.created_at}</h4>
              {this.props.row.status === 1 ? (
                <h3 className="card-title">Pending</h3>
              ) : (
                <h3 className="card-title">Completed</h3>
              )}
            </div>
          </div>
        </div>
      </div>
    );
  }
}

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    您没有阻止默认提交行为。这样做

    getTasks = (e) => {
    e.preventDefault();
    fetch('http://localhost:4000/users')
    .then(response => response.json())
    .then(data => this.setState({ data: data.data }))
    .catch(err => console.log(err))
    }
    

    每当对表单使用提交时,使用e.preventDefault() 它会阻止刷新。

    【讨论】:

    • 感谢队友,但显示“TypeError:无法读取未定义的属性'preventDefault',我是谷歌关于preventDefault但我尝试不同的方法来实现它,但我没有=(
    • 你试过这样输入吗? getTasks = (e) =&gt; 而不是 getTasks =_=&gt;
    • 你也可以试试把这行&lt;form onSubmit={this.getTasks}&gt;改成&lt;form onSubmit={(e) =&gt; this.getTasks(e)}&gt;
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2021-12-04
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多