'I try to make my Material-UI RaisedButton link to an external url without success?

As the question in the title state.

Playing with react, react-router and material-ui and in one place I want to make an action button in a Card component link to an external url, like without success.

I'm currently thinking of adding an event handler to use window.open, but it must be a smarter way?

I did find a solution, before the code looked like this.

<CardActions>
   <RaisedButton
       href={this.props.url}
       label="OK"
   />
</CardActions>

The solution was very simple:

<CardActions>
   <a href={this.props.url} target="_blank">
     <RaisedButton
        label="OK"
     />
   </a>
</CardActions>


Solution 1:[1]

If we are adding external link in react-router Link or material-ui Button then This is important we add 'http://' (or https://) in external url. link will not work without add http.

WRONG CODE -

<Link target="_blank" to='www.google.com'>Google</Link>

then redirect link will

localhost:3000/www.google.com

RIGHT CODE -

If we want to redirect with react-router Link then this is example code -

<Link target="_blank" to='http://www.google.com'>Google</Link>

If we want to redirect with material-ui Button then this is example code -

<Button target="_blank" href="http://www.google.com/">Google</Button>

Note: I added target="_blank" in Link/Button. This is optional (and If I will add any external link in my website then I will want to open that link in another Browser Tab not in same Tab.)

Solution 2:[2]

You can wrap <RaisedButton /> into <Link /> component for internal routing.

<Link to={this.props.cardItem.resourceUrl}>
  <RaisedButton label="Ok" />
</Link>

And wrap into simple <a> tag for external:

<a href={this.props.cardItem.resourceUrl}>
  <RaisedButton label="Ok" />
</a>

Solution 3:[3]

You should use target, component, and href props

<Button                
   target="_blank"
   component="a"
   href="http://www.google.com/"
>
 Google
</Button>

Solution 4:[4]

<Button component={Link} to={path} >
   LINK BUTTON
</Button>

Solution 5:[5]

I tried using a Link in the Button.component prop - but it lead to the Button component to be full-width and trying to style it with width: auto; did nothing.

Anyway, long story short I was able to get this to work functionally and stylistically with:


      <Link href="/somewhere/over/the/rainbow" target="_blank">
        <Button size="medium" variant="contained" color="primary">
          View RV
        </Button>
      </Link>

Solution 6:[6]

This still was buggy for me. The fix was to use <a> instead of react-router-dom's <Link>.

Solution 7:[7]

You can simply pass the href prop to the Button component. With that, Button will automatically work as a Link. You're also allowed to pass, for instance, the target prop if you want to open the link in a separate tab.

const PremiumButton = () => (
  <Button size="large" href="https://buy.stripe.com/14kdSp4bg6Qj2v65km" variant="contained">
    Criar conta premium
  </Button>
)

The code above, then, should output something like:

enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Roy Rico
Solution 3 Shishir Arora
Solution 4 baggy
Solution 5 Dylan Pierce
Solution 6 Aniket Suryavanshi
Solution 7 Flavio Wuensche