Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问父组件中的子组件支柱。

访问父组件中的子组件支柱。
EN

Stack Overflow用户
提问于 2020-05-22 02:57:28
回答 1查看 127关注 0票数 6

我面临一个问题,有一个名为Breadcrumb的样式组件,但是该组件依赖于一个单独的样式组件,即BreadcrumbItem。这两个组件都有不同的道具。

BreadcrumbItem.js:

代码语言:javascript
运行
AI代码解释
复制
import React from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';

const propTypes = {
  /** Active the current BreadcrumbItem. */
  active: PropTypes.bool,
  /** Additional classes. */
  className: PropTypes.string
};



const AbstractBreadcrumbItem = (props) => {
  const { className, active, ...attributes } = props;

  return <li {...attributes} className={className} />;
};

AbstractBreadcrumbItem.propTypes = propTypes;

const BreadcrumbItem = styled(AbstractBreadcrumbItem)``;

BreadcrumbItem.propTypes = propTypes;

export default BreadcrumbItem;

Breadcrumb.js:

代码语言:javascript
运行
AI代码解释
复制
import React from "react";
import styled from "styled-components";
import PropTypes from "prop-types";

const propTypes = {
  /** Additional classes. */
  className: PropTypes.string,
  /** Primary content. */
  children: PropTypes.node,
  /** Custom separator */
  separator: PropTypes.string,
  /** Change the look and feel of the BreadcrumbItem. */
  scheme: PropTypes.oneOf(["red", "purple"]).isRequired
};

const defaultProps = {
  scheme: "red",
  separator: "/"
};

const AbstractBreadcrumb = props => {
  const { className, children, separator, scheme, ...attributes } = props;

  return (
    <ul {...attributes} className={className}>
      {children}
    </ul>
  );
};

AbstractBreadcrumb.propTypes = propTypes;
AbstractBreadcrumb.defaultProps = defaultProps;

const Breadcrumb = styled(AbstractBreadcrumb)`

              display: flex;
              flex-wrap: wrap;
              padding: 18px 26px;
              margin-bottom: 1rem;
              list-style: none;
              background-color: #fbfbfb;
              border-radius: 4px;


              li + li:before {
                content: "${props => props.separator}";
              }

              li + li {
                padding-left: 8px;
            }

              li + li::before {
              display: inline-block;
              padding-right: 0.5rem;
            }

            li a {
               font-size: 14px;
               transition: color .4s linear;
               color: ${props => (props.scheme === "red" ? "red" : "purple")};
               &:hover {
                color: black;
               }
            }
`;

Breadcrumb.propTypes = propTypes;
Breadcrumb.defaultProps = defaultProps;

export default Breadcrumb;

这是创建Breadcrumb的主要标记。

App.js:

代码语言:javascript
运行
AI代码解释
复制
import React from 'react';
import Breadcrumb from './Breadcrumb';
import BreadcrumbItem from './BreadcrumbItem';

export default function App() {
  return (
    <div className="App">
      <Breadcrumb scheme="red">
        <BreadcrumbItem>
          <a href="/">Home</a>
        </BreadcrumbItem>
        <BreadcrumbItem>
          <a href="/">Shop</a>
        </BreadcrumbItem>
        <BreadcrumbItem active>
          <a href="/">Product</a>
        </BreadcrumbItem>
      </Breadcrumb>
    </div>
  );
}

我面临的问题是,我希望使用父active组件内的BreadcrumbItem组件的BreadcrumbItem支柱来根据方案更改项目的外观和感觉。

我找到了第一种方法,即在组件本身中添加BreadcrumbItem样式,并使用类似于这个${props => props.active ? css`` : css``}的东西。但是,在styled-component中是否有一种方法可以访问父组件中的子组件prop

请在styled-components上下文中回答这个问题。

实时链接:码箱

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 03:07:04

我建议将列表项的样式,即<li>,移动到它自己的组件,即BreadcrumbItem。在这个场景中,您不需要访问子组件的状态,而是以<li>样式处理<li>状态。而且它看起来会更干净,关注点的分离(反应建议)也会出现。

编辑:用于访问儿童道具的示例代码

代码语言:javascript
运行
AI代码解释
复制
const List = ({ children }) => {
  return (
    <ul>
      {React.Children.map(children, x => {
        console.log(x.props); // get props of children

        return x;
      })}
    </ul>
  );
};

const Item = ({ children }) => <li>{children}</li>;

export default function App() {
  return (
    <List>
      <Item>Hello</Item>
      <Item active>HI</Item>
    </List>
  );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61953446

复制
相关文章
pycharm显示没有interpreter_pycharm interpreter为空
在pycharm中创建新project的时候总会遇到interpreter invalid,需要你去重新配置interpreter
全栈程序员站长
2022/09/27
1.9K0
pycharm显示没有interpreter_pycharm interpreter为空
jq 判断是否为空,为空隐藏指定 div
<style>.mydiv{ width:300px; height:300px; background:red;}</style> <div class="mydiv">     <div class="content">          这是一句话,删除的话会让 mydiv display:none;          </div> </div> <script src="https://lib.baomitu.com/jquery/3.4.1/jquery.min.js"></script> <sc
Savalone
2020/02/11
7.5K0
sonarqube6代码覆盖率显示为空 单元测试不为空
搭建完sonarqube6.1之后,按照网上找到的命令执行:mvn clean install mvn sonar:sonar,打开sonarqube网页查看结果时却发现一个奇怪的现象:
johnhuster的分享
2022/03/29
1.9K0
sonarqube6代码覆盖率显示为空  单元测试不为空
在DAX里将空值或0显示为减号?这个问题可能困扰不少人!
近期碰到个很有意思的例子,一个度量值,其中判断某个值为0时,结果用减号“-”表示,不是0时执行相应的除法:
大海Power
2021/08/31
3.9K0
python判断是否为空_python 判断对象是否为空
在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码:if a is None:
全栈程序员站长
2022/07/01
11.1K0
小程序根据返回值是否为空判断标签是否显示
如果为空,则不显示奖励这两个字的标签 wxml <view class="cu-item" wx:for="{{allSignList}}" wx:key="index"> <view class="content"> <view wx:if="{{item.taskReward}}">奖励:{{item.taskReward}}</view> </view> </view> js Page({ data: { allSignList: [] }, onLoad: fun
王小婷
2020/12/28
2.9K0
小程序根据返回值是否为空判断标签是否显示
java判断空对象为空_Java判断对象是否为空(包括null ,””)的方法[通俗易懂]
public static boolean isEmpty(Object obj)
全栈程序员站长
2022/06/25
7.6K0
java如何判断对象为空_java对象如何判断是否为空
在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException。
全栈程序员站长
2022/06/25
13.9K0
java如何判断对象为空_java对象如何判断是否为空
JavaScript中为空判断
摘要总结:本文介绍了JavaScript中为空判断的不同情况,包括判断字符串是否为空、变量是否被定义和初始化过。通过这些判断,可以帮助开发人员编写更加健壮的代码。
林老师带你学编程
2018/01/03
4.2K0
java判断list为空
if(null == list || list.size() ==0 ){ }
似水的流年
2018/01/12
5K0
Java Optional 初始为空
Optional<QualificationStateLabelInfo> stateSpecificLabel = null;
HoneyMoose
2022/05/18
2.9K0
Java Optional 初始为空
java判断list为空
if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素 而size()返
似水的流年
2019/12/10
3.7K0
UrlReferrer为空的问题?
官方解释:获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。 1.也就是说,如果用Request.Redirect之后,再用Request.UrlReferrer是得不到前一个页面的链接的,因为这不是客户端的请求。 2.既然服务端不行,那换个思路:在客户端用js导航如何?比如下面这样 A.aspx上用window.location='B.aspx' 但实践证明在B.aspx上用Request.UrlReferrer仍然为空,即js导航也不行! 3.用A链接试一下 A.aspx上写一段ht
菩提树下的杨过
2018/01/23
2.6K0
java判断list为空
if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素 而
似水的流年
2018/01/18
3.9K0
环境变量:PYTHONPATH
大家在编写模块的时候,总会遇到这么一个问题:把模块放到安装目录下的Lib目录里面就可以正常使用了,可是过了几天重装了Python,自己写的模块也没了,然后就是感觉身体被掏空,心情极度难受,精神非常崩溃,毕竟自己辛辛苦苦写的库没了。
不可言诉的深渊
2019/07/26
10.7K0
jdbctemplate查询为空报错_java空指针异常举例
Dao类是不能直接new出来的必须是通过 ApplicationContext applicationContext= new
全栈程序员站长
2022/11/17
3.3K0
使用“空”对象替代引用是否为空判断
使用Null对象替代引用是否为空判断 编程语言中最常见运行时异常非NullPointerException莫属,只要程序依赖于外部的输入数据,比如说http请求传递的查询字符串参数、关系数据库连接、磁盘文件读取,空引用异常就无法避免。通常,程序需要满足某些条件才能正常的往下执行,假如这些条件依赖外部输入数据,而这些外部输入的数据肯定无法保证百分百不出错,比如说网络连接失败、数据库用户名密码错误等,当程序被这些节外生枝的障碍打断时,空引用异常就极有可能被引发。 比如说,原本我们调用一个方法,这个方法会执行连接
用户1608022
2018/04/11
7.9K0
java怎么判断对象为空_java中怎么判断对象是否为空
一种是org.apache.commons.lang3包下的;另一种是org.springframework.util包下的。
全栈程序员站长
2022/06/28
7.2K0
java怎么判断对象为空_java中怎么判断对象是否为空
@NacosInjected private NamingService namingService 为空
发布者:全栈程序员栈长,转转请注明出处:https://javaforall.cn/2185.html原文链接:
全栈程序员站长
2021/04/07
2.4K0
java 对象为空判断_java中判断对象是否为空的方法
首先,直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候返回false。然后,在object != null 为true的情况下,进一步去判断对象的所有属性是否为null。
全栈程序员站长
2022/08/15
12K0
java 对象为空判断_java中判断对象是否为空的方法

相似问题

安装错误认为pythonpath为空

20

Ubuntu监督PYTHONPATH未被设定

214

Ubuntu 14.04上的PYTHONPATH序

59

Github Action/Ubuntu:添加到PYTHONPATH

126

在ubuntu上设置PYTHONPATH无效标识符失败

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档