GVKun编程网logo

使用Javascript和CSS的ReactJs模式(css in js react)

13

此处将为大家介绍关于使用Javascript和CSS的ReactJs模式的详细内容,并且为您解答有关cssinjsreact的相关问题,此外,我们还将为您介绍关于ff与ie对javascript和cs

此处将为大家介绍关于使用Javascript和CSS的ReactJs模式的详细内容,并且为您解答有关css in js react的相关问题,此外,我们还将为您介绍关于ff与ie对javascript和css的区别、IE8中使用javascript动态加载CSS的解决方法_javascript技巧、javascript – ReactJs – 可重用的Redux服务、javascript – ReactJS:JSX属性名称的模式的有用信息。

本文目录一览:

使用Javascript和CSS的ReactJs模式(css in js react)

使用Javascript和CSS的ReactJs模式(css in js react)

如何将带有主体结束标签的reactjs模态窗口追加到带有主体标签的模态定位绝对值中。

这是在另一个组件内添加的示例。

<div className="modal">  <p>Model Pop-up <button onClick={this.handleClick}>here</button></p>    <div id="js-modal-inner" className="modal">      <div className="modal__content js-dialog">        <a className="modal__close" onClick={this.handleClose}>&times;</a>        <header className="modal__header">          <h2 className="modal__title">Split Ticket:</h2>        </header>        <div className="modal__content--inner">          {this.props.children}        </div>      </div>    </div>    <div className="modal__overlay js-fade"></div>  </div>

答案1

小编典典

在反应中,这通常称为“层”。看到这个小提琴

/** @jsx React.DOM */var ReactLayeredComponentMixin = {    componentWillUnmount: function() {        this._unrenderLayer();        document.body.removeChild(this._target);    },    componentDidUpdate: function() {        this._renderLayer();    },    componentDidMount: function() {        // Appending to the body is easier than managing the z-index of everything on the page.        // It''s also better for accessibility and makes stacking a snap (since components will stack        // in mount order).        this._target = document.createElement(''div'');        document.body.appendChild(this._target);        this._renderLayer();    },    _renderLayer: function() {        // By calling this method in componentDidMount() and componentDidUpdate(), you''re effectively        // creating a "wormhole" that funnels React''s hierarchical updates through to a DOM node on an        // entirely different part of the page.        React.renderComponent(this.renderLayer(), this._target);    },    _unrenderLayer: function() {        React.unmountComponentAtNode(this._target);    }};var Modal = React.createClass({    killClick: function(e) {        // clicks on the content shouldn''t close the modal        e.stopPropagation();    },    handleBackdropClick: function() {        // when you click the background, the user is requesting that the modal gets closed.        // note that the modal has no say over whether it actually gets closed. the owner of the        // modal owns the state. this just "asks" to be closed.        this.props.onRequestClose();    },    render: function() {        return this.transferPropsTo(            <div className="ModalBackdrop" onClick={this.handleBackdropClick}>                <div className="ModalContent" onClick={this.killClick}>                    {this.props.children}                </div>            </div>        );    }});var ModalLink = React.createClass({    mixins: [ReactLayeredComponentMixin],    handleClick: function() {        this.setState({shown: !this.state.shown});    },    getInitialState: function() {        return {shown: false, ticks: 0, modalShown: false};    },    componentDidMount: function() {        setInterval(this.tick, 1000);    },    tick: function() {        this.setState({ticks: this.state.ticks + 1});    },    renderLayer: function() {        if (!this.state.shown) {            return <span />;        }        return (            <Modal onRequestClose={this.handleClick}>                <h1>Hello!</h1>                Look at these sweet reactive updates: {this.state.ticks}            </Modal>        );    },    render: function() {        return <a href="javascript:;" role="button" onClick={this.handleClick}>Click to toggle modal</a>;    }});React.renderComponent(<ModalLink />, document.body);

ff与ie对javascript和css的区别

ff与ie对javascript和css的区别

随着互联网的不断发展,网页开发成为了人们生活中不可或缺的一部分。网页开发中使用的javascript和css语言也变得越来越重要。而对于不同的浏览器,它们对javascript和css的解释和实现也存在一些差异。本文将着重讨论ff和ie对javascript和css的区别。

一、JavaScript的区别

  1. 事件处理器

FF和IE的事件处理器有一些差别。FF不支持通过特定方式在一个元素上覆盖事件处理器。而IE则可以通过使用DOM元素的“AttachEvent”方法覆盖原来的事件处理器。

  1. 对象属性的访问

在JavaScript中,对象的属性可以通过两种方式进行访问:直接引用对象属性和使用方括号操作符。但是在IE浏览器中,当对象属性的名称与已有的全局变量名称相同时,通过直接引用对象属性访问时会出现问题。

  1. 操作符顺序

FF和IE对于JavaScript的操作符顺序的处理也存在差别。在JavaScript中,操作符顺序决定了语句的执行顺序。而在IE浏览器中,对于操作符优先级的处理会与其他浏览器存在差异。

立即学习“Java免费学习笔记(深入)”;

  1. 对象属性的枚举顺序

在JavaScript中,对象属性的枚举顺序是未定义的。但是在IE浏览器中,对象的属性会按照特定的顺序被枚举出来。

二、CSS的区别

  1. 盒子模型

在CSS中,盒子模型是非常重要的一个概念。但是在FF和IE中,盒子模型的实现存在差异。在FF中,盒子模型会默认采用“标准模型”,即元素的宽度和高度不包含边框和内边距。而在IE中,默认采用的是“传统模型”,即元素的宽度和高度包含边框和内边距。

  1. CSS选择符

在CSS中,选择符的使用非常广泛。但是在FF和IE中,对于一些选择符的支持也存在差异。例如,FF支持CSS3中的属性选择器,在IE中需要使用JavaScript来实现。

  1. 解释CSS的方式

FF和IE对CSS的解释方式也存在差异。在FF中,CSS的解释过程是非常严格的,对于任何错误都不会进行容错。而在IE中,会存在一些容错机制,可以允许一些错误的CSS语法通过。

  1. 样式表的缓存

在CSS样式表文件被请求时,浏览器会进行缓存,以提高页面加载的速度。但是在FF和IE中,对于缓存的处理也存在差异。在FF中,如果样式表的URL发生了变化,浏览器会清除缓存并重新加载。而在IE中,如果样式表的URL未发生变化,即使样式表本身发生了变化,浏览器也会使用缓存中的旧样式表进行解释。

综上所述,随着互联网的不断发展,网页开发越来越重要。而掌握不同浏览器对JavaScript和CSS的差异也显得非常必要。所以,在进行网页设计时,我们还需要考虑到不同浏览器的兼容性问题。

以上就是ff与ie对javascript和css的区别的详细内容,更多请关注php中文网其它相关文章!

IE8中使用javascript动态加载CSS的解决方法_javascript技巧

IE8中使用javascript动态加载CSS的解决方法_javascript技巧

众所周知做前端开发的都恨不得踹IE开发者几脚,IE开发者名声之差不低于GFW开发者,昧着良心搞坏市场,人人得而诛之,但是在中国这些地方市场占有率摆在那里,没办法只能向现实低头。

最近我们产品需要在浏览器里动态载入一段CSS,以前的代码是直接用的:

复制代码 代码如下:

var bubbleCss = document.createElement(''style'');
bubbleCss.type = ''text/css'';
bubbleCss.innerHTML = blc_conf.bubbleStyle;
document.getElementsByTagName(''head'')[0].appendChild(bubbleCss);

不过这个只有IE9支持,在IE8下会出问题,一直也没注意到这块,直到最近重构后做完整测试的时候才发现。
网上搜到一个技巧,试过,可行,但是有一些问题
复制代码 代码如下:

window.bc_bubble_css = blc_conf.bubbleStyle;
document.createStyleSheet("javascript:bc_bubble_css");

这里可以创建由变量bc_bubble_css定义的样式,不过由于HTML5逐渐普及,我们的css里也混入了一些css3 selector,使用这个方法会导致IE8的parser解析到css3 selector的时候抛异常并停止解析后续css,这让css只加载了一半,网上搜到的办法都是用StyleSheet类型的addRule来增加,不过这个需要自己指定css2 selector以及样式,
因此需要从CSS中拆开单个的规则,然后依次调用addRule,例子:
复制代码 代码如下:

var s = document.createStyleSheet();
var rules = blc_conf.bubbleStyle.replace(/\/\*[^\*]*\*\//g, "").replace(/@[^{]*\{/g, '''').match(/[^\{\}]+\{[^\}]+\}/g);
for(var i = 0; i     var m = rules[i].match(/(.*)\s*\{\s*(.*)\}/);
    if(m) {
        try {
            s.addRule(m[1], m[2]);
        } catch(e) {
        }
    }
}

开头有两个替换,分别去掉注视和部分css3 的selector,不过依然有漏网的selector,需要在后面try catch 捉一下。

另外再次鄙视设计IE接口的人

javascript – ReactJs – 可重用的Redux服务

javascript – ReactJs – 可重用的Redux服务

我理解Redux的操作,缩减器和映射到商店的概念.
我已经能够成功地将Redux执行到我的应用程序中.

我正在愉快地使用React的contextTypes来处理需要以前调用过的Redux数据的子组件.

然后我遇到了一个奇怪的情况,数据被一个孩子变异了.当我在SO上发布问题时,一位成员告诉我,无论如何我应该谨慎使用contextTypes.

因此,克服我的问题的唯一方法是映射到子项的父项中的商店,AGAIN,就像之前父项的更高组件,并将该数据作为道具传递给子项.

但这似乎对我来说都是错的.再次映射到同一个商店?为什么?我不明白的是什么?为什么我必须在需要另一个组件映射到的相同数据的每个组件上写这个?

export default class Foo extends Component {        

  .....

  // I DID THIS STUFF IN A HIGHER COMPONENT.
  // WHY MUST I REPEAT MYSELF AGAIN?
  // WHAT AM I NOT UNDERSTANDING?

  static propTypes = {
    children: PropTypes.node.isrequired,dispatch: PropTypes.func.isrequired,products: PropTypes.array
  };

  componentDidMount() {
    const { dispatch } = this.props;  
    dispatch(fetchProductsIfNeeded());
  }

  .....

 }
const mapStatetoProps = (state) => {
  const {productsReducer } = state;
  if (!productsReducer) {
    return {
      isFetching: false,didInvalidate: false,error: null,products: []
    };
  }

  return {
    error: productsReducer.error,isFetching: productsReducer.isFetching,didInvalidate: productsReducer.didInvalidate,products: productsReducer.products
  };
};

export default connect(mapStatetoProps)(Foo);

我看了容器,但在我看来,容器一次性包裹所有哑组件……

<ProductsContainer>
      <ProductsComponent />
      <ProductSpecialsComponent />
      <ProductsdiscountedComponent />
   </ProductsContainer>

这不是我想要的.我想,就像一项服务,我可以在每个相应的哑组件中使用该容器作为这样的….

<ProductsContainer>
      <ProductsdiscountedComponent />
   </ProductsContainer>

   <ProductsContainer>
      <ProductSpecialsComponent />
   </ProductsContainer>

   <ProductsContainer>
      <ProductsComponent />
   </ProductsContainer>

现在,为了获得上面说明的3个子组件,每个组件必须映射到商店,这似乎都是错误的.

我找不到任何我能把握的解决方案.

题:

有没有一种方法可以映射到特定的商店一次,并为那些需要该数据的组件调用“服务”?

如果是这样,我们将不胜感激.

后脚本:

我或许如果我可以将’映射服务’作为纯粹的JavaScript函数执行,而只是在需要它的组件中导入该函数,这将解决问题,但我还没有看到任何Redux的例子正在映射的商店o / s React.

更新:

我在这里发布了解决方案……

React-Redux – Reuseable Container/Connector

解决方法

首先,抛开你过去的问题.确实,上下文不适合这样的事情.您还应该担心您提到的突变.如果您正在使用Redux存储,则退出它的数据应始终是不可变的.也许像 Immutable.js这样的图书馆会有所帮助.

现在让我们转向手头的问题.也许你并不完全是一个“愚蠢”的组成部分.一个愚蠢的组件应该是无国籍和纯粹的:

const Product = ({ name,comments }) => (
  <div>
    <h1>{name}</h1>
    <CommentsList comments={comments} />
  </div>
);

该组件从道具中获取所需的一切.现在有很多方法可以将数据导入到这个组件中,但它们都基于props.例如,以下是最直接的:

const ProductList = ({ products }) => (
  <div>
    {products.map( p => <Product product={product} /> )}
  </div>
);

class App extends Component {
  getinitialState () {
    return { products: [] };
  }

  componentDidMount () {
    // connect to store,blah blah...
  }

  render () {
    return (
      <div>
        {/* blah blah */}
        <ProductsList products={this.state.products} />
        {/* blah blah */}
      </div>
    );
  }
}

从示例中可以看出,整个组件树将从简单的道具中获取其状态,这些道具从一个连接传递到商店.除App之外,所有组件都是哑巴,无状态和可预测的.

但也有一些情况,通过道具连接整个树是不切实际的,我们需要本地连接到我们的商店.这就是HOC可以提供巨大帮助的地方:

const WithProducts = Comp => class WrappedComponent extends Component {
  getinitialState () {
    return { products: [] };
  }

  componentDidMount () {
    // connect to store,blah blah...
  }

  render () {
    return (
      <Comp products={this.state.products} {...this.props} />
    );
  }
}

const ProductListWithProducts = WithProducts( ProductList );

现在,我们所包装的任何组件都将从商店收到产品列表作为支柱 – 无需代码重复.不要重复自己.请注意我没有改变ProductList或Product组件以使其工作:这些组件太愚蠢而无法关注.

您创建的任何React应用程序中的大多数组件都应该是如此愚蠢.

另外,您不应该担心不止一次打电话给您的商店.如果您对此感到担心,那么商店实施会出现问题,因为对商店的调用应该是幂等的.您可以使用操作等来填充商店,但这应该完全独立于从商店获取值.设计良好的商店检索应该没有性能或网络惩罚(同样,使用像Immutable这样的库也可以在这里帮助).

javascript – ReactJS:JSX属性名称的模式

javascript – ReactJS:JSX属性名称的模式

我有以下JSX示例,它是一个SVG元素:

<svg className={className} viewBox="0 0 48 48" version="1.1"
  onClick={this.props.onClick} aria-label="Some random label">
  <g fill="none">
    <line strokeWidth="2" x1="24" y1="14" x2="24" y2="34"/>
    <line strokeWidth="2" x1="14" y1="24" x2="34" y2="24"/>
  </g>
</svg>

在原始HTML中,strokeWidth表示为stroke-width.在我看来,所有JSX属性都遵循camel-case格式.所以,我立即考虑添加ariaLabel而不是aria-label.

问题:JSX属性是否有模式?如果是,为什么咏叹调 – *不遵循这种模式?

事实上,我喜欢使用stroke- *的想法,这样我就不必将我的原始svg预处理为reactjs.

解决方法

aria属性是标准的html属性,React决定保持格式化.它们确实指定您创建的任何自定义html属性都应该以data- *作为前缀,并且在此页面上似乎建议仅对这些特殊情况使用attribute- *语法 https://facebook.github.io/react/docs/jsx-gotchas.html

标准格式为驼峰案例https://facebook.github.io/react/docs/dom-differences.html

关于使用Javascript和CSS的ReactJs模式css in js react的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ff与ie对javascript和css的区别、IE8中使用javascript动态加载CSS的解决方法_javascript技巧、javascript – ReactJs – 可重用的Redux服务、javascript – ReactJS:JSX属性名称的模式等相关内容,可以在本站寻找。

本文标签:

上一篇在JSX中,如何将className设置为字符串+ {prop}(javascript中classname)

下一篇React + ASP.NET.Core:所请求的资源上不存在“ Access-Control-Allow-Origin”标头(所请求的资源不可用哪里错了)