javascript - React.js 子组件不更新从 props 派生的样式,为什么? (样式组件)

标签 javascript node.js reactjs styled-components react-props

我是 react.js 的新手,我正在尝试根据从父组件传递下来的 Prop 来了解条件样式。

我正在尝试制作一个具有样式差异的按钮,具体取决于“已禁用” Prop 是真还是假。如果按钮被禁用 (true),它应该显示为灰色,否则显示为蓝色。

这是我目前的代码,尽管它不起作用而且我不确定原因。

父组件

import React from 'react';

import { storiesOf } from '@storybook/react';
import { action } from '@storybook/addon-actions';
import { linkTo } from '@storybook/addon-links';

import { Welcome } from '@storybook/react/demo';
// Buttons
import Primary from '../components/ButtonPrimary'

storiesOf('Welcome', module).add('to Storybook', () => <Welcome showApp={linkTo('Button')} />);

storiesOf('Buttons')
    .add('Primary', () => <Primary label="Default" disabled="false"></Primary>)

子组件

import React from "react";
import styled from 'styled-components';

const Button = styled.button`
    background-color: ${props => props.disabled ? '#EDEDED' : '#0076C0'};
    border: ${props => props.disabled ? '1px solid #DADADA' : 'none'};    
    color: ${props => props.disabled ? '#818181' : '#FFFFFF'};
    cursor: ${props => props.disabled ? 'unset' : 'pointer'};
    border-radius: 2px;
    font-family: Roboto-Regular;
    font-size: 16px;
    padding: 6px 32px;
    font-family: roboto, helvetica, sans-serif;
    font-size: 18px;

    &:focus {
        outline: none;
    }

    &:hover {
        box-shadow: ${props => props.disabled ? 'unset' : '0px 1px 2px 1px #b3b3b3'};
    }

    &:active {
        box-shadow: ${props => props.disabled ? 'unset' : 'inset 0 0 10px #2f2f2f80'};
    }
`;

export default class ButtonPrimary extends React.Component {
    render() {
        return (
            <div>
                <Button disabled={this.props.disabled}>{this.props.label}</Button>
            </div>
        )
    }
}

有人知道为什么吗?

最佳答案

在您的父组件中,您需要将 disabled 更改为 bool 值而不是字符串。

storiesOf('Buttons')
    .add('Primary', () => <Primary label="Default" disabled={false} ></Primary>)

或者,如果您需要将其用作字符串,则需要指定您的条件

${props => props.disabled === 'true' ? '#EDEDED' : '#0076C0'};

关于javascript - React.js 子组件不更新从 props 派生的样式,为什么? (样式组件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192366/

相关文章:

javascript - 使用 Jquery .click 显示/隐藏切换,适用于新用户,但不适用于种子

angularjs - 当请求来自另一个域时,如何在 sails JS 后端应用程序中保留身份验证状态?

javascript - 如何将 NextJS router.query 转换为数字?

Javascript - 检测浏览器版本

javascript - 正则表达式选择特定单词后的单词

javascript - Python/Javascript/AJAX 实时搜索帮助

node.js - 在 Jenkins 中运行 grunt 时无法解析的 NodeJS 安装程序

node.js - Elasticsearch批量API发布请求中的NewLine错误

javascript - 带有反应和验证器的 Redux 形式

javascript - react 。如何仅对现有 key 使用 fetch 和 setState 来处理 API 响应中丢失的 key ?