Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs ';值更改';不存在于类型';只读<;{}>';_Reactjs_Typescript - Fatal编程技术网

Reactjs ';值更改';不存在于类型';只读<;{}>';

Reactjs ';值更改';不存在于类型';只读<;{}>';,reactjs,typescript,Reactjs,Typescript,我试图在React中为SurveyJS中实现的调查实现一个处理程序。这适用于答案可能为“以上任何一项”或“宁愿不回答”的多项选择题。如果选择了其中一个答案,则所有其他答案都应被清除,如果选择了其他答案,则应清除这些复选框。我对这两个选项中的任何一个都做得很好,但是对于两个选项都存在的问题,特别是在两个特殊选项之间来回切换时 我认为发生的是,当一个答案触发处理程序,并取消选中另一个复选框时,它会再次触发处理程序。我的解决方案是设置一个状态,该状态指示处理器在这个过程的中间,而不是在那个时候再次执行

我试图在React中为SurveyJS中实现的调查实现一个处理程序。这适用于答案可能为“以上任何一项”或“宁愿不回答”的多项选择题。如果选择了其中一个答案,则所有其他答案都应被清除,如果选择了其他答案,则应清除这些复选框。我对这两个选项中的任何一个都做得很好,但是对于两个选项都存在的问题,特别是在两个特殊选项之间来回切换时

我认为发生的是,当一个答案触发处理程序,并取消选中另一个复选框时,它会再次触发处理程序。我的解决方案是设置一个状态,该状态指示处理器在这个过程的中间,而不是在那个时候再次执行。 我在这里得到了一个JS解决方案:-下面是我将其转换为React的尝试。(仅包括代码的相关部分。)

但是,在编译时,会出现以下错误:

[at loader]中出错。/src/components/Survey/SurveyContainer.tsx:55:19 TS2339:类型上不存在属性“ValueChanging” “只读”

我找不到有关此特定错误的任何信息。对状态的其他引用(即我设置它的位置)正在工作。为什么我不能读呢

谢谢

组成部分:

interface MyComponentProps { /* declare your component's props here */ }
interface MyComponentState { ValueChanging :  boolean }

class MyComponent extends React.Component<MyComponentProps, MyComponentState> {
  constructor(props) {
  ...
import*as React from'React';
从“react”导入{Component};
从“Survey react”导入{Survey,surveyStrings};
导入“whatwg fetch”;
从“../Marked”导入标记;
从“./style”导入*作为样式;
界面道具{
surveyJson:对象;
完全:布尔;
结果标记:字符串;
调查:字符串;
sendSurveyAnswers:(答案:object[])=>void;
上面的处理程序:(测量:对象,选项:对象)=>void;
}
Survey.cssType=‘标准’;
surveyStrings.progressText='{0}/{1}';
surveyStrings.emptySurvey='';
导出默认类SurveyComponent扩展组件{
render(){
const{surveyJson,sendssurveyanswers,complete,surveytle,resultMarkdown,noneofabovehandler}=this.props;
返回(
{surveyJson&&(!complete)&&
{surveyttle}
}
{完成&&
}
);
}

}
最可能的原因是您没有在组件的类定义中指定组件状态的类型,因此它默认为
{}
。您可以通过声明props和state类型的接口并将其作为类型参数提供给React来修复它。组件:

interface MyComponentProps { /* declare your component's props here */ }
interface MyComponentState { ValueChanging :  boolean }

class MyComponent extends React.Component<MyComponentProps, MyComponentState> {
  constructor(props) {
  ...
interface MyComponentProps{/*在此处声明组件的props*/}
接口MyComponentState{ValueChanging:boolean}
类MyComponent扩展了React.Component{
建造师(道具){
...

您可以直接在
之间提供类型,但使用接口通常会导致更可读的代码并促进重用。为了避免与组件混淆,最好在props和state上的属性使用小写标识符。

仅供参考:我们已经将此功能引入SurveyJS中我以前有时去图书馆

这里有“全选”和“以上无一项”功能,开箱即用,没有自定义代码


谢谢!

您如何取消选中其他复选框?它应该不会那么难和长。可能是如果您可以发布您的组件,我们可以找到一种更小、更简单的方法,当我设置问题的值时,它将成为完整的答案列表。(例如,如果我将其设置为“NA”,则只有“NA”复选框已选中,所有其他复选框均未选中。)我将发布完整的组件。已解决编译问题,谢谢!仍需进行一些逻辑调试,但我可以从此处开始。:)