export function User() {
const [user, setUser] = useState<User | null>();
useEffect(() => {
getUser().then(setUser);
}, []);
if (!user) {
return <div>Loading...</div>;
}
return <p>Hello, {user.fullName}</p>;
}
function getUser() {
return fetch('https://jsonplaceholder.com/users/1')
.then((response) => response.json())
.then(({ firstName, secondName }) => ({
fullName: `${firstName} ${secondName}`,
}));
}
fetch('https://test.org', { method: 'GET' });
// and / /
fetch('https://test.org', { method: 'POST' });
type MoneyProps = {
value: number;
currency: "₴" | "$" | "€";
};
export function Money({ value, currency }: MoneyProps) {
const amount = value.toFixed(2);
if (currency === "$") {
return (
<span className="currency">
{currency} {amount}
</span>
);
}
if (currency === "₴") {
return (
<span className="currency">
{amount} {currency}
</span>
);
}
}
Головна складність - така гнучкість зменшує наочність коду, що погіршує його читабельність та може збільшити складність
class SomeComponent extends PureComponent {
render() {} /*😈*/
}
class SomeComponent extends PureComponent {
setState = null; /*😈*/
render() {
return <>He-he-he</>;
}
}
interface IUser {
name: string;
login: () => Promise<void>;
}
function UserGreeting({ user }: { user: IUser }) {
return <>Hello, {user.name}</>;
}
function App() {
return <UserGreeting user={{ name: "Vitalii", login: () => Promise.resolve() }} />;
}
// ✅ Use this
function UserGreeting({ userName }: { userName: string }) {
return <>Hello, {userName}</>;
}
// ⛔ Not this
function UserGreeting({ user }: { user: User }) {
return <>Hello, {user.userName}</>;
}
class UserApi {
getUser(id) {
return fetch(`https://.../user/${id}`);
}
}
export function User() {
const [user, setUser] = useState<User | null>();
useEffect(() => {
fetch('https://jsonplaceholder.com/users/1')
.then((response) => response.json())
.then(setUser);
}, []);
if (!user) {
return <div>Loading...</div>;
}
return <p>Hello, {user.fullName}</p>;
}