SyntaxError: Detected nested style tag:
styled-jsx only allows style tags to be direct descendants (children) of the outermost JSX element i.e. the subtree root.
index.js:2178 Warning: Received true for a non-boolean attribute jsx.
If you want to write it to the DOM, pass a string instead: jsx="true" or jsx={value.toString()}.
in style (at phone.jsx:34)
in Phone (at phone.jsx:84)
一、是什么
babel插件
1.1 Slogon
二、使用
2.1 封装
假如render方法返回值:
则最终生成的HTML & CSS
head元素里会被插入style样式:
<style jsx>
元素的父元素和父元素的子孙元素都添加了一个唯一的className; 为啥父元素也被添加唯一的className?待研究 看这样子灵感来自shadowdom。<style jsx>
元素包裹的CSS的选择器都追加了一个唯一的className修饰。通过这个唯一的className这样就实现了CSS的封装性(组件的CSS不会影响其他CSS)。
注意:
<style jsx>
元素的父元素的父元素,组件不会添加唯一的className。组件可以包含多个
<style jsx>
元素,但多个<style jsx>
元素必须是兄弟元素,不可以是父子关系,否则会报错:所以一般把
<style jsx>
元素作为组件根元素的子元素。<style jsx>
元素本质上组件的子组件,当组件卸载时,<style jsx>
元素生成的CSS也是被删除的(由JSXStyle组件控制)。targeting-the-root 必有父组件,且不可以是React.Component组件,要不然不能不能识别是