const useInput = (initialValue, validator) => {
const [value, setValue] = useState(initialValue);
const onChange = (e) => {
const {
target: {value}
} = event;
let willUpdate = true;
if (typeof validator === "function") {
willUpdate = validator(value);
}
if (willUpdate) {
setValue(value);
}
};
return { value, onChange };
}
const App = () => {
const maxLen = value => value.length <= 10;
const name = useInput("Mr.", maxLen);
return (
<div>
<input {...name} />
<input value={name.value} onChange={name.onChange}/>
</div>
)
}
useTab
import { useState } from "react";
const tabsContents = [
{
name: "contents1",
content: "contents1"
},
{
name: "contents2",
content: "contents2"
}
];
export const useTab = (init, allTabs) => {
const [curIndex, setCurIndex] = useState(init);
return {
curItem: allTabs[curIndex],
changeItem: setCurIndex
};
};
export default function App() {
const { curItem, changeItem } = useTab(0, tabsContents);
return (
<div className="App">
<h1>useTab</h1>
{tabs.map((el, i) => {
return (
<button
onClick={() => {
changeItem(i);
}}
key={i}
>
{el.name}
</button>
);
})}
<div>{curItem.content}</div>
</div>
);
}