首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我什么时候应该用React.js状态和仅仅CSS来更新UI?

我什么时候应该用React.js状态和仅仅CSS来更新UI?
EN

Stack Overflow用户
提问于 2014-06-02 15:30:45
回答 2查看 746关注 0票数 0

我正在从这个站点重新创建一个输入示例。当您在输入中单击时,充当占位符的标签会向上移动并充当标签。此操作是用CSS完成的。表单的数据没有被更新,但是UI正在改变,这是否意味着状态的改变?CSS中的更改应该保持为CSS,还是应该由React组件中的某个东西触发?

有一个例子,在JSFiddle上没有out React。

JS:

代码语言:javascript
复制
function generate_adaptive_text_input(initial, focused){
    var adaptive_placeholder_input_container = $("<div />", {
        class: 'adaptive_placeholder_input_container'
    });
        var adaptive_placeholder_input = $("<input />",{
            type: 'text',
            required: '',
            class: 'adaptive_text_input'
        });
        var adaptive_placeholder_label = $("<label />",{
            alt: initial,
            placeholder: focused,
            class: 'adaptive_placeholder'
        });
        adaptive_placeholder_input_container.append(adaptive_placeholder_input);
        adaptive_placeholder_input_container.append(adaptive_placeholder_label);
    return adaptive_placeholder_input_container;
}

function generate_form(){
    var form = $('<form />');
        var first_example = generate_adaptive_text_input('Placeholder', 'Active Placeholder');
        var second_example = generate_adaptive_text_input('Off', 'On');


        $(form).append(first_example);
        $(form).append(second_example);
    return form;
}    

function generate_page(){
    var form = generate_form();
    $('body').append(form);
}

CSS:

代码语言:javascript
复制
.adaptive_placeholder_input_container {
    position: relative;
}
.adaptive_text_input {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    width: 200px;
    height: 40px;
    border: 3px solid #aaaaaa;
    border-radius: 10px;
    margin: 0 0 1em;
    padding: 1em;
    background: #fff;
    resize: none;
    outline: none;
}
.adaptive_text_input:focus {
    border-color: #00bafa;
}
.adaptive_text_input:focus + .adaptive_placeholder:before {
    color: #00bafa;
}
.adaptive_text_input:focus + .adaptive_placeholder:before, .adaptive_text_input:valid + .adaptive_placeholder:before {
    -webkit-transition-duration: .2s;
    -webkit-transform: translate(0, -16px) scale(0.9, 0.9);
}
.adaptive_text_input:invalid + .adaptive_placeholder:before {
    content: attr(alt);
}
.adaptive_text_input + .adaptive_placeholder {
    pointer-events: none;
    line-height: 1em;
    position: absolute;
    left: 10px;
    top: 10px;
}
.adaptive_text_input + .adaptive_placeholder:before {
    font-family: Verdana, Geneva, sans-serif;
    content: attr(placeholder);
    display: inline-block;
    padding: 0 2px;
    color: #898989;
    -webkit-transition: 0.3s ease-in-out;
    background-color: #ffffff;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-02 16:35:41

我通常从另一个角度考虑状态,而不是说,“此UI更新是否意味着状态的更改”,我认为“此UI更新是否需要状态更改才能发挥作用”。答案是肯定的,如果:

  1. 我需要依赖render函数中的一些数据来有条件地应用某个类。
  2. UI看起来是一种或另一种方式(也就是说,UI处于特定状态)这一事实需要传达给应用程序的其他部分。

如果这两个问题的答案都是“否”,我认为将UI更改完全保留在CSS中是完全有效的。

票数 3
EN

Stack Overflow用户

发布于 2014-06-02 16:42:19

我同意布兰登的说法。

考虑一下这个例子:

在某种程度上,您可能希望某些操作(快捷键)根据所关注的内容而产生不同的结果。然后,聚焦对象就会成为您状态的一部分。

如果从未发生过这种情况,您可以使用纯CSS解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23998185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档