我正在嘗試將值推送到狀態數組,但無法獲得 TS 錯誤。我將把可以看到錯誤的相關組件放在這裡。錯誤出在子組件上,更具體地說是在 handleValue(value => [...value, item.value])
。
錯誤:
'(value: any) => any[]' 類型的參數不能分配給'string[] 類型的參數
父組件:
const ChooseValuesScreen: React.FC = ({ navigation}) => {
const [value, setValue] = useState([]);
const [valuesProgress, setValuesProgress] = useState(0);
const [convertPercentageIntoUnit, setUnit] = useState(0)
const [numberOfValuesSelected, setNumberOfValuesSelected] = useState(0);
使用佈局效果(()=> {
導航.setOptions({
標頭顯示:假,
})
setUnit(valuesProgress ? 1 : 0)
setNumberOfValuesSelected(numberOfValuesSelected + convertPercentageIntoUnit)
}, [navigation,valuesProgress, convertPercentageIntoUnit, value])
const renderItem: ListRenderItem = ({item}) => ;
返回 (
item.id}
渲染項={渲染項}
風格={[tw``,{}]}
顯示VerticalScrollIndicator ={false}
顯示HorizontalScrollIndicator={false}
列數={3}
columnWrapperStyle={{ flex: 1, justifyContent: "center"}}
/>
)
}
導出默認選擇值屏幕;
子組件:
export type Props = {
項目:任何,
colorOnPress:字符串,
PickActiveOpacity:數字,
handleProgress: (valuesProgress: number) => void;
valuesProgress:數字,
處理值:(值:字符串 [])=> 無效;
};
const CustomButton: React.FC = ({ item ,pickedActiveOpacity, colorOnPress, handleProgress, valuesProgress, handleValue }) => {
返回 (
{
如果(值進度 [...value, item.value])
}}}>
{item.value}
)
}
導出默認自定義按鈕;
如果我只傳遞一個值 handleValue(item.value)
,則不會出現錯誤,狀態數組將接收該值,但我想要的是將值保留在數組中並且沒有一個值替換另一個。
有什麼想法嗎?
我最終通過將函數類型聲明更改為:
handleValue((value:any) => [...value, item.value])
在子組件中,props為handleValue: (value:any) => void;
我相信有更好的方法可以做到這一點,如果有人有更好的解決方案,請告訴我
在您的道具中,您聲明了 handleValue: (value : string[]) => void;
這意味著您的函數將一個參數 value
作為字符串數組
在這裡 handleValue(value => [...value, item.value])
你傳遞一個函數作為 agrument 而不是 string[]
更新。
type CustomFunction = (value: string) => string[]
...
// 在你的道具中
handleValue: (CustomFunction) => void