reactjsmaterial-uidivider

React Create a Horizontal Divider with Text In between


I need to create a React component that is a Horizontal Divider with a content like text In between. All the resources I have online is unable to help me get this done. I tried a material-ui divider by creating a Divider component and placing my text in-between like the example below:

<Divider>Or</Divider>

But I get the error:

hr is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.

I need to achieve this in the image below:

Display a horizontal Divider

Any help will be appreciated.

These are my codes below:

 import React from 'react';
 import { makeStyles } from '@material-ui/core/styles';
 import List from '@material-ui/core/List';
 import Divider from '@material-ui/core/Divider';

 const useStyles = makeStyles((theme) => ({
   root: {
   width: '100%',
   maxWidth: 360,
   backgroundColor: theme.palette.background.paper,
 },
 }));

 export default function ListDividers() {
 const classes = useStyles();

 return (
 <List component="nav" className={classes.root} aria-label="mailbox 
 folders">

  <Divider>Or</Divider>

  </List>
  );
 }

Solution

  • Here a custom example of what you could do : repro on stackblitz

    import React, { Component } from "react";
    import { render } from "react-dom";
    import Hello from "./Hello";
    import "./style.css";
    
    const App = () => {
      return <Divider>Or</Divider>;
    };
    
    const Divider = ({ children }) => {
      return (
        <div className="container">
          <div className="border" />
          <span className="content">
            {children}
          </span>
          <div className="border" />
        </div>
      );
    };
    
    render(<App />, document.getElementById("root"));
    

    And the CSS:

    .container{
      display: flex;
      align-items: center;
    }
    
    .border{
      border-bottom: 1px solid black;
      width: 100%;
    }
    
    .content {
      padding: 0 10px 0 10px;
    }