【问题标题】:Console.log data entered in a form with React js使用 React js 以表单形式输入的 Console.log 数据
【发布时间】:2020-10-26 21:47:12
【问题描述】:

我正在尝试使用 React JS 通过表单输入数据,但它不起作用。

我有一个合作伙伴模型,它有一个名称和一个徽标。我创建了一个表单来输入合作伙伴的名称及其徽标图像。

这是 AddPartnerForm.js 文件:

import React, { Component } from 'react';
import Box from '@material-ui/core/Box';
import Button from '@material-ui/core/Button';
import TextField from '@material-ui/core/TextField';
import Skeleton from '@material-ui/lab/Skeleton';
import axios, { post } from 'axios';


export default class AddPartnerForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      newPartnerData: {
        partnerlogo: '',
        partnername: ''
      },
      partnerlogouploaded: false
    }
    this.onChange = this.onChange.bind(this)
    this.onUpload = this.onUpload.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }

onChange(e) {
     this.setState({
       newPartnerData: {
        [e.target.name]: e.target.result
       }
     });
}

onUpload(e) {
    let file= e.target.files[0];
    this.setState({
          newPartnerData: {
          partnerlogo: file,
        }
    }); 
    this.setState({ partnerlogouploaded: true });
  }

handleSubmit(e){
  e.preventDefault()
  console.log(this.state.newPartnerData)
}

render() {
    let partnerlogo;
    if (partnerlogouploaded) {
      partnerlogo = <img style={{ width: 200, height: 200 }} src={this.state.partnerlogo} />;
    } else {
      partnerlogo = <Skeleton variant="rect" width={200} height={200} />;
    }
  return (
      <form>
        <TextField
          name="partnername"
          autoFocus
          margin="dense"
          id="name"
          label="Partner's name"
          type="text"
          fullWidth
          onChange={this.onChange}
        />
        <input accept="image/*"
          style={{ display: 'none' }}
          id="contained-button-partner-logo"
          name="partnerlogo"
          multiple
          type="file"
          diplay="none"
          onChange={this.onUpload} />

        <label htmlFor="contained-button-partner-logo" className="upload-button">
          <Button variant="contained" color="primary" component="span" >
            Upload Partner Logo
          </Button>
        </label>

        <Box width={200} height={200} marginRight={0.5} my={5}>
         {partnerlogo}
        </Box>

        <Button type="submit" onClick={this.handleSubmit} variant="contained" color="primary" component="span" >
            Add
        </Button>
      </form>
    )
  }
}

当我在表单中只输入合作伙伴的姓名(不上传图片)时,我会收到以下回复: {合作伙伴名称:未定义}

当我上传图片并输入合作伙伴的姓名时,我会收到以下回复: {合作伙伴徽标:文件} (我只得到我上传的图像)

【问题讨论】:

    标签: javascript reactjs file-upload form-data


    【解决方案1】:

    e.target.result 更改为e.target.value

    onChange(e) {
             this.setState({
               newPartnerData: {
                [e.target.name]: e.target.value
               }
             });
        }
    
    
    onUpload(e) {
        let file= e.target.files[0];
        this.setState(prev => ({
          ...prev,
          newPartnerData: {
          ...prev.newPartnerData,
          partnerlogo: file,
        },
        partnerlogouploaded: true
        })); 
      }
    

    【讨论】:

    • 当我只输入合作伙伴的名字时它可以工作,但是当我尝试用它上传图片时,它只返回:{partnerlogo: File}
    • 为此使用带有回调函数的 setState。 setState(prev=> {...prev, partnerlogouploaded: true})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2021-02-06
    • 2021-08-03
    • 2021-01-23
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多