【发布时间】:2019-08-21 00:27:29
【问题描述】:
我目前正在开发一个多页清单应用程序,以提高通用清单程序的效率。
我的父组件 MainForm 拥有我的应用程序的所有状态。在我的第一个子元素中,我必须填写一些文本输入。状态正在按计划更新和保存。我的第二页(或其他子元素)是我的清单开始的部分。问题是我的应用程序正在渲染,但单选按钮值没有发送到我的状态。我也有一个问题,我可以选择“是”单选按钮,然后选择“否”单选按钮,但我无法从“否”变为“是”。 radioGroup21 是给我带来问题的广播组。所有其他州都在工作。
我的控制台出现错误提示:
“复选框包含带有 value 和 defaultValue 属性的 radio 类型的输入。输入元素必须是受控或不受控制的(指定 value 属性或 defaultValue 属性,但不能同时指定两者)。决定使用受控还是不受控输入元素并删除这些道具之一。
我尝试在我的 Radio 元素中删除 value 标签和 defaultValue 行,但没有成功。我尝试在我的父元素中创建构造函数(道具),但我仍然遇到问题。”
到目前为止,我已经尝试删除单选按钮中的 defaultValue,并且在尝试删除值行之后。不幸的是,这对我没有帮助。
我还阅读了有关受控和非受控输入的信息。我尝试更改我的父组件状态以将它们放在构造函数(道具)括号中。但没有运气。
我也尝试不使用 handleChange 函数,而是使用值为 {radioButton21 === 'yes'} 的 setState 函数,但这没有用。
//Parent Component
Class MainForm extends Component {
state = {
step: 1,
projectNumber: '',
projectName: '',
numberOfSystems: '',
buildSheet: '',
controlPhilosophy: '',
projectLayoutDrawing: '',
projSoftwareValidation: '',
CppDrawing: '',
radioGroup21: '',
}
nextStep = () => {
const { step } = this.state
this.setState({
step : step + 1
})
}
prevStep = () => {
const { step } = this.state
this.setState({
step : step - 1
})
}
handleChange = input => event => {
this.setState({ [input] : event.target.value })
}
render(){
const {step} = this.state;
const { projectNumber, projectName, numberOfSystems, buildSheet , controlPhilosophy, projectLayoutDrawing, projSoftwareValidation, CppDrawing, radioGroup21 } = this.state;
const values = { projectNumber, projectName, numberOfSystems, buildSheet, controlPhilosophy, projectLayoutDrawing, projSoftwareValidation, CppDrawing, radioGroup21 };
switch(step) {
case 1:
return <ProjectInfo
nextStep={this.nextStep}
handleChange = {this.handleChange}
values={values}
/>
case 2:
return <PrelimInspection
nextStep={this.nextStep}
prevStep={this.prevStep}
handleChange = {this.handleChange}
values={values}
/>
export default MainForm;
-----------------------------------
//Child Component
import React, { Component } from 'react';
import { Form, Button, Radio } from 'semantic-ui-react';
import { throws } from 'assert';
class PrelimInspection extends Component{
saveAndContinue = (e) => {
e.preventDefault();
this.props.nextStep();
}
back = (e) => {
e.preventDefault();
this.props.prevStep();
}
render(){
const { values } = this.props
return(
<Form color='blue' >
<h1 className="ui centered">System Installation</h1>
<Form.Field inline>
<Form.Field>System Properly Supported</Form.Field>
<Radio
label = {'Yes'}
name = {'radio21'}
value = {'Yes'}
onChange={this.props.handleChange('radioGroup21')}
defaultValue={values.radioGroup21}
/>
<Radio
label = {'No'}
name = {'radio21'}
value = {'No'}
onChange={this.props.handleChange('radioGroup21')}
defaultValue={values.radioGroup21}
/>
</Form.Field>
<Button onClick={this.back}>Back</Button>
<Button onClick={this.saveAndContinue}>Save And Continue </Button>
</Form>
)
}
}
export default PrelimInspection
应用正在渲染,布局正确。不幸的是,状态值没有被发送到父状态。
【问题讨论】:
-
什么是 ProjectInfo 组件?你只分享了 PrelimInspection 的代码
标签: reactjs semantic-ui