javascript - DefaultProps för React StatelessComponent i TypeScript
Jag ville använda en React stateless-komponent i TypeScript med defaultProps.
Jag kan inte hitta en lösning på hur man använder typings som skulle tillåta mig att använda defaultProps i ett TypeScript-projekt utan diamond-syntax.
import {Link} from "react-router";
interface LinkProps {
...
}
const LinkPresenter = (props: LinkProps): JSX.Element =>
<Link
...
>
...
</Link>;
LinkPresenter.defaultProps = { // !!! unresolved variable defaultProps
...
};
Svar #1
Typen React.SFC tillåter att fästa defaultProps till en React-stateless komponent.
Nedan kan du hitta ett förenklat exempel på React.SFC med defaultProps.
import {Link} from "react-router";
interface LinkProps {
to?: HistoryModule.LocationDescriptorObject;
onClick?: (event: React.FormEvent) => void;
children?: React.ReactNode;
}
const LinkPresenter: React.SFC = (props: LinkProps): JSX.Element =>
<Link
className="link"
to={props.to}
onClick={props.onClick}
>
{props.children}
</Link>;
// Alternative syntax
const LinkPresenter: React.StatelessComponent = (props: LinkProps): JSX.Element =>
...
LinkPresenter.defaultProps = { // now we can use defaultProps
to: {
pathname: `/homepage`,
query: {
default: 'someDefault'
}
},
onClick: () => {},
children: <span>Hello world</span>,
};
Svar #2
Bara för att utveckla vår konversation, här är ett alternativ som använder TS/ES6-standardegenskapsmetoden:
import {Link} from "react-router";
interface LinkProps {
to?: HistoryModule.LocationDescriptorObject;
onClick?: (event: React.FormEvent) => void;
children?: React.ReactNode;
}
let defaultProps : LinkProps = {
to: {
pathname: `/homepage`,
query: {
default: 'someDefault'
}
},
onClick: () => {},
children: <span>Hello world</span>
}
const LinkPresenter = (props: LinkProps = defaultProps): JSX.Element =>
<Link
className="link"
to={props.to}
onClick={props.onClick}
>
{props.children}
</Link>;
