-
- Notifications
You must be signed in to change notification settings - Fork 2.8k
Closed
Description
@Arcanemagus's docsUrl commit didn't account for the rule naming conventions of the different method names in /lib/util/makeNoMethodSetStateRule.
Currently componentWillUpdate
links to /docs/rules/componentWillUpdate (doesn't exist, 404) when it should be linking to /docs/rules/no-will-update-set-state:
function makeNoMethodSetStateRule(methodName, shouldCheckUnsafeCb) { return { meta: { docs: { description: `Prevent usage of setState in ${methodName}`, category: 'Best Practices', recommended: false, url: docsUrl(methodName) },
I'm proposing to create a function that gets the proper url within /lib/util/makeNoMethodSetStateRule.
I have three suggestions to propose, and wanted feedback prior to opening a PR. Do you recommend placing this function at the top, under the 'Rule Definition' header? And then I would call the function directly within the docs
object: url: docsUrl(getDocsTitle(methodName))
function getDocsTitle1(methodName) { let title; switch (methodName) { case 'componentDidMount': title = 'did-mount'; break; case 'componentDidUpdate': title = 'did-update'; break; case 'componentWillUpdate': title = 'will-update'; break; default: throw Error(`No docsUrl for '${methodName}'`); } return `no-${title}-set-state`; } function getDocsTitle2(methodName) { return `${methodName.match(/[A-Z][a-z]+/g) .reduce((res, e) => `${res}-${e.toLowerCase()}`, 'no')}-set-state`; } function getDocsTitle3(methodName) { return methodName.match(/[A-Z][a-z]+/g) .reduce((x, y) => `no-${x.toLowerCase()}-${y.toLowerCase()}-set-state`); } function getDocsTitle4(methodName) { const map = { componentDidMount: 'did-mount', componentDidUpdate: 'did-update', componentWillUpdate: 'will-update', }; const title = map[methodName]; if (!title) throw Error(`No docsUrl for '${methodName}'`); return `no-${title}-set-state`; } console.log(getDocsTitle1('componentWillUpdate')); // no-will-update-set-state console.log(getDocsTitle2('componentWillUpdate')); // no-will-update-set-state console.log(getDocsTitle3('componentWillUpdate')); // no-will-update-set-state console.log(getDocsTitle4('componentWillUpdate')); // no-will-update-set-state
Metadata
Metadata
Assignees
Labels
No labels