如何在reactjs+;打字脚本(钩子)
我是打字新手。我需要在一个按钮上使用ref来更新reducer值,从而将子状态值传递给父级 我已尝试将如何在reactjs+;打字脚本(钩子),reactjs,typescript,react-hooks,Reactjs,Typescript,React Hooks,我是打字新手。我需要在一个按钮上使用ref来更新reducer值,从而将子状态值传递给父级 我已尝试将ref传递给孩子,但我得到的错误与此类似: 类型“{value:string;onChange:Dispatch;ref:mutableReObject;}” 不可分配给类型“IntrinsicattAttributes&Props&{children?:ReactNode;}” 属性“ref”在类型“IntrinsicattAttributes&Props&{children?:ReactNo
ref
传递给孩子,但我得到的错误与此类似:
类型“{value:string;onChange:Dispatch;ref:mutableReObject;}”
不可分配给类型“IntrinsicattAttributes&Props&{children?:ReactNode;}”
属性“ref”在类型“IntrinsicattAttributes&Props&{children?:ReactNode;}”上不存在。ts(2322)
父组件
import React, from "react";
import styled from "styled-components";
import {
Page,
Welcome,
ErrorBoundary
} from "components";
const ParentDiv = styled.div`
margin: 0 410px 30px 15px;
`;
export const CreateEvent = (props: any) => {
return (
<Page title='Dashboard'>
<ErrorBoundary>
{(() => {
switch (activeEventStage?.step) {
case 1:
return (
<ErrorBoundary>
<Welcome />
</ErrorBoundary>
);
default:
return null;
}
})()}
</ErrorBoundary>
</Page>
);
};
export default withRouter(CreateEvent);
import React, { useState } from "react";
import { Row, Col } from "react-bootstrap";
export const Welcome = () => {
const { t } = useTranslation();
const [state, setState] = useState({
welBannerTagline: "",
welHeroTitle: "",
});
return (
<CreateEventFormContainer
title={t("event.create.title")}
subTitile={t("welcome.subTitle")}
>
<>
<Row>
<Col lg='6'>
<DropZoneInputField
titleName={t("welcome.bgImage.title")}
onSelectedFiles={onDropFiles}
imageType='bgImage'
value={state.welBgFilename}
/>
</Col>
<Col lg='6'>
<DropZoneInputField
titleName={t("welcome.banner.title")}
onSelectedFiles={onDropFiles}
imageType='bannerImage'
value={state.welBannerFilname}
/>
</Col>
</Row>
</>
</CreateEventFormContainer>
);
};
export default Welcome;
从“React”导入React;
从“样式化组件”导入样式化;
进口{
页
欢迎
错误边界
}来自“组件”;
const ParentDiv=styled.div`
利润率:0 410px 30px 15px;
`;
导出常量CreateEvent=(道具:任意)=>{
返回(
{(() => {
开关(activeEventStage?.step){
案例1:
返回(
);
违约:
返回null;
}
})()}
);
};
使用路由器导出默认值(CreateEvent);
子组件
import React, from "react";
import styled from "styled-components";
import {
Page,
Welcome,
ErrorBoundary
} from "components";
const ParentDiv = styled.div`
margin: 0 410px 30px 15px;
`;
export const CreateEvent = (props: any) => {
return (
<Page title='Dashboard'>
<ErrorBoundary>
{(() => {
switch (activeEventStage?.step) {
case 1:
return (
<ErrorBoundary>
<Welcome />
</ErrorBoundary>
);
default:
return null;
}
})()}
</ErrorBoundary>
</Page>
);
};
export default withRouter(CreateEvent);
import React, { useState } from "react";
import { Row, Col } from "react-bootstrap";
export const Welcome = () => {
const { t } = useTranslation();
const [state, setState] = useState({
welBannerTagline: "",
welHeroTitle: "",
});
return (
<CreateEventFormContainer
title={t("event.create.title")}
subTitile={t("welcome.subTitle")}
>
<>
<Row>
<Col lg='6'>
<DropZoneInputField
titleName={t("welcome.bgImage.title")}
onSelectedFiles={onDropFiles}
imageType='bgImage'
value={state.welBgFilename}
/>
</Col>
<Col lg='6'>
<DropZoneInputField
titleName={t("welcome.banner.title")}
onSelectedFiles={onDropFiles}
imageType='bannerImage'
value={state.welBannerFilname}
/>
</Col>
</Row>
</>
</CreateEventFormContainer>
);
};
export default Welcome;
import React,{useState}来自“React”;
从“react bootstrap”导入{Row,Col};
导出常量欢迎=()=>{
const{t}=useTranslation();
常量[状态,设置状态]=使用状态({
韦尔班纳格列奈:“,
欢迎:",,
});
返回(
);
};
出口默认值欢迎;
之所以会出现此错误,是因为欢迎
的设计目的不是接受ref
道具
ref
是React中的保留道具名称,因此为了将道具ref
传递给子组件,该子组件必须使用该道具来接受ref
道具
您可以使用任何其他道具名称直接传递ref对象,例如myRef
。在这种情况下,您不需要使用forwardRef
,但需要确保孩子的道具接受一个道具myRef
,它是一个ref
ref本身的类型取决于它最终连接到DOM的位置。可能是一个HTMLButtonElement
interface WelcomeProps {
myRef: React.MutableRefObject<HTMLButtonElement | null>;
}
export const Welcome = ({myRef}: WelcomeProps) => {
...
export const CreateEvent=(props:RouteComponentProps)=>{
返回(
...
{
//在这里做一些有价值的事情
}} />
...
你在哪里使用useRef?我在上面的代码中没有看到它。我已经删除了它,因为它破坏了我的工作,我只需要在钩子中使用typescript来获取子状态值的解决方案
export const CreateEvent = (props: RouteComponentProps) => {
return (
...
<Welcome myCallback={(value) => {
// do something here with the value
}} />
...