Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug?] Warning: [JSS] Could not find the referenced rule logoAndCopyright in aphrodite-jss. #25

Open
trusktr opened this issue Sep 5, 2018 · 4 comments

Comments

@trusktr
Copy link

trusktr commented Sep 5, 2018

I've got some styles using jss-nested with $classname syntax:

const style = StyleSheet.create({
  footer: {
    // ...

    '& $logoAndCopyright': {
      // ...
    },
  },

  logoAndCopyright: {},
})

then when I use it,

css(style.logoAndCopyright)

I get an error like

Warning: [JSS] Could not find the referenced rule logoAndCopyright in aphrodite-jss.

Full output:

Warning: [JSS] Could not find the referenced rule logoAndCopyright in aphrodite-jss.
  | warning | @ | _app.js:26063
-- | -- | -- | --
  | (anonymous) | @ | _app.js:1331
  | onProcessStyle | @ | _app.js:1393
  | onProcessStyle | @ | _app.js:3186
  | onProcessRule | @ | _app.js:3171
  | addRule | @ | _app.js:3759
  | css | @ | _app.js:211
  | render | @ | _app.js:26170
  | finishClassComponent | @ | main.js:24135
  | updateClassComponent | @ | main.js:24097
  | beginWork | @ | main.js:24766
  | performUnitOfWork | @ | main.js:26805
  | workLoop | @ | main.js:26844
  | renderRoot | @ | main.js:26884
  | performWorkOnRoot | @ | main.js:27502
  | performWork | @ | main.js:27424
  | performSyncWork | @ | main.js:27396
  | requestWork | @ | main.js:27296
  | scheduleWork$1 | @ | main.js:27160
  | scheduleRootUpdate | @ | main.js:27727
  | updateContainerAtExpirationTime | @ | main.js:27754
  | updateContainer | @ | main.js:27781
  | module.exports.webpackJsonp.../node_modules/react-dom/cjs/react-dom.development.js.ReactRoot.render | @ | main.js:28064
  | (anonymous) | @ | main.js:28204
  | unbatchedUpdates | @ | main.js:27621
  | legacyRenderSubtreeIntoContainer | @ | main.js:28200
  | hydrate | @ | main.js:28256
  | renderReactElement | @ | main.js:6559
  | _callee5$ | @ | main.js:6534
  | tryCatch | @ | main.js:30206
  | invoke | @ | main.js:30440
  | prototype.(anonymous function) | @ | main.js:30258
  | step | @ | main.js:166
  | _next | @ | main.js:181
  | (anonymous) | @ | main.js:188
  | F | @ | main.js:1500
  | (anonymous) | @ | main.js:161
  | _doRender | @ | main.js:6551
  | doRender | @ | main.js:6433
  | _callee2$ | @ | main.js:6339
  | tryCatch | @ | main.js:30206
  | invoke | @ | main.js:30440
  | prototype.(anonymous function) | @ | main.js:30258
  | step | @ | main.js:166
  | _next | @ | main.js:181
  | (anonymous) | @ | main.js:188
  | F | @ | main.js:1500
  | (anonymous) | @ | main.js:161
  | _render | @ | main.js:6369
  | render | @ | main.js:6311
  | _callee$ | @ | main.js:6290
  | tryCatch | @ | main.js:30206
  | invoke | @ | main.js:30440
  | prototype.(anonymous function) | @ | main.js:30258
  | step | @ | main.js:166
  | _next | @ | main.js:181
  | Promise.then (async) |   |  
  | step | @ | main.js:176
  | _next | @ | main.js:181
  | Promise.then (async) |   |  
  | step | @ | main.js:176
  | _next | @ | main.js:181
  | Promise.then (async) |   |  
  | step | @ | main.js:176
  | _next | @ | main.js:181
  | (anonymous) | @ | main.js:188
  | F | @ | main.js:1500
  | (anonymous) | @ | main.js:161
  | ../node_modules/next/dist/client/next-dev.js | @ | main.js:6592
  | __webpack_require__ | @ | manifest.js:715
  | fn | @ | manifest.js:118
  | 0 | @ | main.js:35329
  | __webpack_require__ | @ | manifest.js:715
  | webpackJsonpCallback | @ | manifest.js:26
  | (anonymous) | @ | main.js:2
@trusktr
Copy link
Author

trusktr commented Sep 5, 2018

Seems like I'm doing things correctly, because if I modify my component from using aphrodite-jss,

import {StyleSheet, css} from 'aphrodite-jss'
import {Component} from 'react'

export default
class Foo extends Component {
  render() {
    return <div className={css(classes.footer)}>
      <div className={css(classes.logoAndCopyright)} />
    </div>
  }
}

const classes = StyleSheet.create({
  footer: {
    // ...

    '& $logoAndCopyright': {
      // ...
    },
  },

  logoAndCopyright: {},
})

to using plain JSS (from react-jss), then it works great:

import {jss} from 'react-jss'
import {Component} from 'react'

export default
class Foo extends Component {
  render() {
    return <div className={classes.footer}>
      <div className={classes.logoAndCopyright} />
    </div>
  }
}

const {classes} = jss.createStyleSheet({
  footer: {
    // ...

    '& $logoAndCopyright': {
      // ...
    },
  },

  logoAndCopyright: {},
}).attach()

So seems something isn't working in aphrodite-jss.

@trusktr trusktr changed the title [bug] Warning: [JSS] Could not find the referenced rule logoAndCopyright in aphrodite-jss. [bug?] Warning: [JSS] Could not find the referenced rule logoAndCopyright in aphrodite-jss. Sep 5, 2018
@HenriBeck
Copy link
Member

I think the problem is the order of evaluation. The rules are lazily attached, which means the rules are only attached once css is being called with them. The footer rule is being attached before the logoAndCopyright rule, which results in the warning.

I don't know if we can fix this. You can just call css(classes.logoAndCopyright) before which should fix your problem.

@trusktr
Copy link
Author

trusktr commented Sep 5, 2018

Hmmm, that may be a strange caveat. It'd be nice to fix it. Well I've switched to react-jss because I was able to get that to work with SSR in the other thread, and to use aphrodite-jss I would have to solve the same problem again for aphrodite-jss.

@kuzmenko-tgn
Copy link

As I see - it's old issue - but maybe somebody gonna looking for solution as I - to resolve this I moved style Initialization inside of component body

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants