reactjs - Prop eksisterer ikke på typen 'PropsWithChildren' når man prøver å dispatch'e handlingen ved å bruke react-redux
Jeg får denne feilen når jeg prøver å utføre handlingen:
Egenskapen 'fetch_feed_loc' finnes ikke på typen 'PropsWithChildren<{ onSubmitForm: any; }>'.
Egenskapen 'fetch_feed_loc_srch' finnes ikke på typen 'PropsWithChildren<{ onSubmitForm: any; }>'.
Men når jeg gjør console.log av props, viser det meg at handlingene eksisterer som props.
import React, { useState } from 'react';
import { useForm, Controller } from 'react-hook-form';
import { IonLabel, IonInput, IonIcon, IonItem, IonButton, IonBadge, IonSelect, IonSelectOption } from '@ionic/react';
import {navigateOutline} from 'ionicons/icons';
import { connect } from 'react-redux';
import { fetch_feed_loc, fetch_feed_loc_srch } from '../actions';
const LocationSearch: React.FC<{onSubmitForm: any}> = props => {
console.log(props);
const [data, setData] = useState<object>({});
const initialValues = {
location: '',
searchTerm: ''
}
const {control, handleSubmit, errors, formState, setValue} = useForm({
defaultValues: initialValues,
mode : 'onChange'
})
const onSubmit = (data: any) => {
const submitttedData: any = data;
setData(submitttedData);
submitttedData.searchTerm == '' ? props.fetch_feed_loc(submitttedData.location) : props.fetch_feed_loc_srch(submitttedData.location, submitttedData.searchTerm)
};
return(
<div className="ion-padding">
<form onSubmit={handleSubmit(onSubmit)} >
<IonItem className="cm-form-field" lines="none">
<IonLabel position="floating">Location</IonLabel>
<Controller
as={IonInput}
control={control}
onChangeName="onIonChange"
onChange={([selected]) => {
return selected.detail.value;
}}
name="location"
rules={{
required: true,
}}
/>
{errors.location ? renderErrorMessage('location'): null }
</IonItem>
<IonItem className="cm-form-field" lines="none">
<IonLabel position="floating">Search</IonLabel>
<Controller
as={IonInput}
control={control}
onChangeName="onIonChange"
onChange={([selected]) => {
return selected.detail.value;
}}
name="searchTerm"
rules={{
minLength: { value: 3, message: "Must be min 3 chars long" }
}}
/>
</IonItem>
{errors.searchTerm ? renderErrorMessage('searchTerm'): null }
<IonButton
expand="block"
shape="round"
size="default"
type="submit"
disabled={formState.isValid === false}
>
<IonIcon slot="start" icon={navigateOutline}></IonIcon>
Submit
</IonButton>
</form>
</div>
)
}
export default connect(null, { fetch_feed_loc, fetch_feed_loc_srch })(LocationSearch);
Svar #1
Jeg vet ikke nøyaktig hva du har inni props, men du må beskrive det innenfor type eller interface. Bare forestill deg at props holder to objekter: product og user, så i dette tilfellet må du beskrive disse objektene:
type Props = {
product: {
title: string;
description: string;
price: number;
...
},
user: {
userName: string;
userEmail: string:
...
}
}
Og senere kan du bruke denne typen og destrukturere propsene dine:
const LocationSearch: React.FC<Props> = ({product, user})=> ...
En ting til, ikke bruk ANY-typen mens du bruker TypeScript, TypeScript brukes til typer.
