Reactjs 材质UI自动完成时的Typescript相等问题
数据存储为:Reactjs 材质UI自动完成时的Typescript相等问题,reactjs,typescript,material-ui,formik,Reactjs,Typescript,Material Ui,Formik,数据存储为: { iso: "gb", label: "United Kingdom", country: "United Kingdom" }, { iso: "fr", label: "France", country: "France" } 传递给自动完成的值为: { iso: "gb", label: "United Kingdom", country: "United Kingdom" } 控制台中报告了错误 物料界面:提供给自动完成的值无效。 所有选项均与{“标签”:“英国”
{ iso: "gb", label: "United Kingdom", country: "United Kingdom" },
{ iso: "fr", label: "France", country: "France" }
传递给自动完成的值为:
{ iso: "gb", label: "United Kingdom", country: "United Kingdom" }
控制台中报告了错误
物料界面:提供给自动完成的值无效。
所有选项均与{“标签”:“英国”、“iso”:“gb”、“国家”:“英国”}
不匹配
value={}
类型“string | ICountry”不能分配给类型“ICountry | ICountry[]| null |未定义”。
类型“string”不可分配给类型“ICountry | ICountry[]| null | undefined”
问题:向组件传递数据并没有将其设置为相应的选项,我完全不知道如何解决这个问题
代码沙盒问题:
物料界面
的完整信息如下:
物料界面:提供给自动完成的值无效。
所有选项均与{“标签”:“英国”、“iso”:“gb”、“国家”:“英国”}
不匹配。
您可以使用getOptionSelected
prop自定义相等性测试
默认的相等性测试只是==
,因此如果您的选项是对象,那么您的值必须是这些对象中的一个,才能匹配。具有相同值的不同对象将不匹配
但是,正如消息告诉您的,您可以通过getOptionSelected
prop自定义相等性测试。例如,您可以指定:
getOptionSelected={(option, value) => option.iso === value.iso}
或者,您可以对所有对象属性进行深度相等性检查
可以使用value={values.address.country as ICountry}
修复类型错误
这里是您的沙盒的一个工作版本:最好有一个codesandbox链接,但您应该将所有相关代码作为文本包含在问题本身中(请参阅)。我对material ui一无所知,但类型问题似乎是您正在将初始值设置为可能的
'
,一个字符串,而不是中的未定义的
。运行时问题可能是其他问题。谢谢Jcalz,我将在以后的问题中采纳你的观点。这对我很有用!!要清除此警告,“材质UI:提供给自动完成的值无效。没有与匹配的选项”。谢谢。对于最新的材料UI实验室依赖项(4.0.0-alpha.57),同样的错误。似乎不可改变。无论谁想要避免警告,都可以降级到类似4.0.0-alpha.51(如Codesandbox示例中所使用的)。那个版本删除了对我的警告。
import { ICountry } from "./investor";
export const countries: ICountry[] = [
{
iso: "gb",
label: "United Kingdom",
country: "United Kingdom"
},
{
iso: "fr",
label: "France",
country: "France"
}
];
getOptionSelected={(option, value) => option.iso === value.iso}