[{"data":1,"prerenderedAt":297},["ShallowReactive",2],{"navigation_docs":3,"diagnostic-content-NUXT0061":44},[4,8,12,16,20,24,28,32,36,40],{"title":5,"path":6,"stem":7},"CLI","\u002Fcli","1.cli",{"title":9,"path":10,"stem":11},"Nuxt","\u002Fnuxt","2.nuxt",{"title":13,"path":14,"stem":15},"Vue","\u002Fvue","3.vue",{"title":17,"path":18,"stem":19},"Vite","\u002Fvite","4.vite",{"title":21,"path":22,"stem":23},"Nitro","\u002Fnitro","5.nitro",{"title":25,"path":26,"stem":27},"TypeScript","\u002Ftypescript","6.typescript",{"title":29,"path":30,"stem":31},"shadcn","\u002Fshadcn","7.shadcn",{"title":33,"path":34,"stem":35},"Package","\u002Fpackage","8.package",{"title":37,"path":38,"stem":39},"Extending Doctor","\u002Fextending","9.extending",{"title":41,"path":42,"stem":43},"Pinia","\u002Fpinia","9.pinia",{"id":45,"title":46,"body":47,"category":53,"code":286,"description":287,"docsUrl":54,"extension":288,"fix":82,"framework":289,"meta":290,"navigation":291,"pack":56,"path":292,"ruleId":57,"rulePath":58,"seo":293,"severity":59,"source":60,"sourceUrl":61,"stem":294,"why":295,"__hash__":296},"diagnostics\u002Fdiagnostics\u002FNUXT0061.md","NUXT0061: Use explicit useState keys in exported composables",{"type":48,"value":49,"toc":276},"minimark",[50,62,67,76,80,83,87,92,95,159,162,212,216,219,244,248,260,264,272],[51,52],"rule-metadata",{"category":53,"docsUrl":54,"fix":55,"pack":56,"ruleId":57,"rulePath":58,"severity":59,"source":60,"sourceUrl":61},"hydration","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-state#usage","suggestion","vite-doctor\u002Fnuxt","nuxt\u002Fstate\u002Fprefer-explicit-usestate-key-in-exported-composables","\u002Fnuxt\u002Frules\u002Fstate\u002Fprefer-explicit-usestate-key-in-exported-composables","warn","src\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fprefer-explicit-use-state-key-in-exported-composables.ts","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fvite-doctor\u002Fblob\u002Fmain\u002Fsrc\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fprefer-explicit-use-state-key-in-exported-composables.ts",[63,64,66],"h2",{"id":65},"why-it-happens","Why it happens",[68,69,70,71,75],"p",{},"Compiler-generated ",[72,73,74],"code",{},"useState()"," keys depend on the composable's source location. An explicit key keeps state identity stable when an exported composable moves or changes.",[63,77,79],{"id":78},"fix","Fix",[68,81,82],{},"Use the Nuxt-supported explicit usestate key in exported composables pattern instead.",[63,84,86],{"id":85},"example","Example",[88,89,91],"h3",{"id":90},"use-explicit-usestate-keys","Use explicit useState keys",[68,93,94],{},"Before",[96,97,102],"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export function useCounter() {\n  return useState(() => 0)\n}\n","ts","",[72,103,104,128,153],{"__ignoreMap":101},[105,106,109,113,117,121,125],"span",{"class":107,"line":108},"line",1,[105,110,112],{"class":111},"s7zQu","export",[105,114,116],{"class":115},"spNyl"," function",[105,118,120],{"class":119},"s2Zo4"," useCounter",[105,122,124],{"class":123},"sMK4o","()",[105,126,127],{"class":123}," {\n",[105,129,131,134,137,141,143,146,150],{"class":107,"line":130},2,[105,132,133],{"class":111},"  return",[105,135,136],{"class":119}," useState",[105,138,140],{"class":139},"swJcz","(",[105,142,124],{"class":123},[105,144,145],{"class":115}," =>",[105,147,149],{"class":148},"sbssI"," 0",[105,151,152],{"class":139},")\n",[105,154,156],{"class":107,"line":155},3,[105,157,158],{"class":123},"}\n",[68,160,161],{},"After",[96,163,165],{"className":98,"code":164,"language":100,"meta":101,"style":101},"export function useCounter() {\n  return useState('counter', () => 0)\n}\n",[72,166,167,179,208],{"__ignoreMap":101},[105,168,169,171,173,175,177],{"class":107,"line":108},[105,170,112],{"class":111},[105,172,116],{"class":115},[105,174,120],{"class":119},[105,176,124],{"class":123},[105,178,127],{"class":123},[105,180,181,183,185,187,190,194,196,199,202,204,206],{"class":107,"line":130},[105,182,133],{"class":111},[105,184,136],{"class":119},[105,186,140],{"class":139},[105,188,189],{"class":123},"'",[105,191,193],{"class":192},"sfazB","counter",[105,195,189],{"class":123},[105,197,198],{"class":123},",",[105,200,201],{"class":123}," ()",[105,203,145],{"class":115},[105,205,149],{"class":148},[105,207,152],{"class":139},[105,209,210],{"class":107,"line":155},[105,211,158],{"class":123},[63,213,215],{"id":214},"verify-the-fix","Verify the fix",[68,217,218],{},"Run only this rule after editing so the report stays focused on the diagnostic you are closing:",[96,220,224],{"className":221,"code":222,"language":223,"meta":101,"style":101},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm nuxt doctor --rules nuxt\u002Fstate\u002Fprefer-explicit-usestate-key-in-exported-composables\n","bash",[72,225,226],{"__ignoreMap":101},[105,227,228,232,235,238,241],{"class":107,"line":108},[105,229,231],{"class":230},"sBMFI","pnpm",[105,233,234],{"class":192}," nuxt",[105,236,237],{"class":192}," doctor",[105,239,240],{"class":192}," --rules",[105,242,243],{"class":192}," nuxt\u002Fstate\u002Fprefer-explicit-usestate-key-in-exported-composables\n",[63,245,247],{"id":246},"useful-links","Useful links",[249,250,251],"ul",{},[252,253,254],"li",{},[255,256,259],"a",{"href":54,"rel":257},[258],"nofollow","Upstream docs",[63,261,263],{"id":262},"related-rule","Related rule",[249,265,266],{},[252,267,268],{},[255,269,270],{"href":58},[72,271,57],{},[273,274,275],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":101,"searchDepth":130,"depth":130,"links":277},[278,279,280,283,284,285],{"id":65,"depth":130,"text":66},{"id":78,"depth":130,"text":79},{"id":85,"depth":130,"text":86,"children":281},[282],{"id":90,"depth":155,"text":91},{"id":214,"depth":130,"text":215},{"id":246,"depth":130,"text":247},{"id":262,"depth":130,"text":263},"NUXT0061","Finds Nuxt state code that should use the supported explicit usestate key in exported composables pattern instead.","md","nuxt",{},true,"\u002Fdiagnostics\u002Fnuxt0061",{"title":46,"description":287},"diagnostics\u002FNUXT0061","Compiler-generated useState() keys depend on the composable's source location. An explicit key keeps state identity stable when an exported composable moves or changes.","Gc-X89ezwivjGMs4apEYIycMGrphXt-SU5Lahr4TEWU",1791309499602]