javascript - react 嵌套的动态表单

标签 javascript reactjs

soooo接近让它工作,但似乎无法解决这个问题。

我有一个表单应该提交到具有以下结构的 json 文件:

    {
      title: '',
      content: [
        {className: '', body: ''}
      ]
    }

我可以毫无问题地设置标题的状态,以及内容数组中的第一个对象。我想我需要创建一个循环还是什么?以下是我的完整组件。

import React, { Component } from 'react';

class AddEditPage extends Component {
  constructor(props) {
    super(props)
    this.state = {
      title: '',
      content: [
        {className: '', body: ''}
      ]
    }
    this.addInput = this.addInput.bind(this);
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleNestedChange = this.handleNestedChange.bind(this);
  }

  handleChange(e) {
    const value = e.target.value
    this.setState({
      [e.target.name]: value
    })
  }

  handleNestedChange(e) {
    const value = e.target.value
    console.log(e.target.id)
    this.setState({

    })

  }

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

  addInput() {
    const newInput = { className: '', body: ''}
    this.setState({content: this.state.content.concat(newInput)});
  }


  render() {
    const contentInputs = this.state.content.map((content, i)=> {
     return (
        <div key={i}>
          <input 
            type="text" 
            name="className"
            id={`${i}`} 
            placeholder="Class name"
            onChange={this.handleNestedChange}
          />
          <input 
            type="text" 
            name="body" 
            placeholder="Body"
            id={`${i}`}
            onChange={this.handleNestedChange}
          />
        </div>
      )
    })

    return (
      <div>
        <h2>New Page</h2>
        <form onSubmit={this.handleSubmit}>
            <input 
            type="text" 
            name="title" 
            placeholder={this.state.title || `Enter the title`}
            onChange={this.handleChange} 
            />
          <h3>Content</h3>
            {contentInputs}
            <button onClick={this.addInput}>Add</button>
          <input type="submit" />
        </form>
      </div>
    );
  }
}

export default AddEditPage;

🍩 为答案点赞哈哈

最佳答案

虽然这不是一个非常可靠的解决方案,但假设 input 'name' 属性始终与您所在状态中的对象键完全匹配,您可以这样做:

handleNestedChange(e) {
    const newStateContent = this.state.content;
    newStateContent[e.target.id][e.target.name] = e.target.value;
    this.setState({
      content: newStateContent
    });
}

关于javascript - react 嵌套的动态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929930/

相关文章:

javascript - Cloud Code 向响应添加属性

javascript - FilmRoll 加载额外的 <div>

javascript - knockout 装订的 strip 元素

javascript - 如何更改数组的克隆而不更改 reactjs 中的原始数组

reactjs - 带有react-draft-wysiwyg的react-hook-form Controller

javascript - 如何右键单击 <tr>,运行 php 来检索数据,并在警报中显示结果?

javascript - 连接字符串和 html 元素的数值以增加变量

reactjs - 在react-redux中const和props指的是什么?

reactjs - React 组件和 React 组件实例有什么区别?

javascript - React 文档未渲染