https://github.com/testing-library/react-hooks-testing-library export const Foo = ({ bar }) => { const { result, loading, error } = useRequest(bar); if (error) { return <ErrorComponent />; } else if (loading) { return <LoadingComponent />; } return <ResultComponent result={result} />; };This looks reasonably good at a glance, but what about when we have to repeat this pattern for a dozen different requests? You would copy and paste this conditional block to each of those different implementations and in each of them, it would need to be tested on its own.An HoC implementation could resemble something like this:const Foo = ({ result }) => <ResultComponent result={result} />;const withRequest = BaseComponent => ({ bar, ...props }) => { const { result, loading, error } = useRequest(bar); return ( <BaseComponent {...props} result={result} loading={loading} error={error} /> ); };const withError = branch(({ error }) => error, ErrorComponent);const withLoading = branch(({ loading }) => loading, LoadingComponent);export default compose( withRequest, withLoading, withError )(Foo);Prop Mutation
const Result = ({ bar }) => <ResultComponent result={bar} />;const withBar = BaseComponent => ({ foo, ...props }) => ( <BaseComponent {...props} bar={transform(foo)} /> );export default withBar(Result);const ResultComponent = (props) => {const { hello } = propsreturn (<div><h1>{hello}</h1></div>)}ResultComponent.propTypes = {hello: PropTypes.string.isRequired,};const withHello = BaseComponent => (props) => {const { name } = propsconst str = `Hi ${name}`return <BaseComponent hello={str} />}const Hello = withHello(ResultComponent);<Hello name='Joe' />
the vast majority of cases map , forEach , find etc. can be used. async function printFiles () { const files = await getFilePaths(); await Promise.all(files. map (async (file) => { const contents = await fs.readFile(file, 'utf8') console.log(contents) })); } const inventory = [ { name : 'apples' , quantity : 2 } , { name : 'bananas' , quantity : 0 } , { name : 'cherries' , quantity : 5 } ] ; const result = inventory . find ( ( { name } ) => name === 'cherries' ) ; function getFirstMatching(array) { for (let item of array) { const result = heavyTransform(item); if (result) { return result; } } } Specifically this shuts down the whole no-restricted-syntax. If you want to cherry-pick, here is the current definition: 'no-restricted-syntax' : [ 'error' , { selector : 'ForInStatement' , message...
Comments
Post a Comment