JSFiddle - React, Tailwind, and code Playground

HTML

<div id='cssmenu'>
<ul>
   <li><a href='#'><span>Principal</span></a></li>
   <li class='active has-sub'><a href='#'><span>Produtos</span></a>
      <ul>
         <li class='has-sub'><a href='#'><span>Produto 1</span></a>
            <ul>
               <li><a href='#'><span>Sub Produto</span></a></li>
               <li class='last'><a href='#'><span>Sub Produto</span></a></li>
            </ul>
         </li>
         <li class='has-sub'><a href='#'><span>Produto 2</span></a>
            <ul>
               <li><a href='#'><span>Sub Produto</span></a></li>
               <li class='last'><a href='#'><span>Sub Produto</span></a></li>
            </ul>
         </li>
      </ul>
   </li>
   <li><a href='#'><span>Sobre</span></a></li>
   <li class='last'><a href='#'><span>Contato</span></a></li>
</ul>
</div>

CSS

@import url(http://fonts.googleapis.com/css?family=Roboto+Condensed:400,300);
#cssmenu {
  position: relative;
  margin: 0;
  font-family: 'Roboto Condensed';
  line-height: 1;
  width: 200px;
}
.align-right {
  float: right;
}
#cssmenu ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: block;
}
#cssmenu ul li {
  position: relative;
  margin: 0;
  padding: 0;
}
#cssmenu ul li a {
  text-decoration: none;
  cursor: pointer;
}
#cssmenu > ul > li > a {
  color: #dddddd;
  text-transform: uppercase;
  display: block;
  padding: 20px;
  border-top: 1px solid #000000;
  border-left: 1px solid #000000;
  border-right: 1px solid #000000;
  background: #222222;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  letter-spacing: 1px;
  font-size: 16px;
  font-weight: 300;
  -webkit-transition: all 0.25s ease-in;
  -moz-transition: all 0.25s ease-in;
  -ms-transition: all 0.25s ease-in;
  -o-transition: all 0.25s ease-in;
  transition: all 0.25s ease-in;
  position: relative;
}
#cssmenu > ul > li:first-child > a {
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}
#cssmenu > ul > li:last-child > a {
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
  border-bottom: 1px solid #000000;
}
#cssmenu > ul > li:hover > a,
#cssmenu > ul > li.open > a,
#cssmenu > ul > li.active > a {
  background: #151515;
  color: #ffffff;
}
#cssmenu ul > li.has-sub > a::after {
  content: "";
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-top: 13px solid #000000;
  border-botom: 13px solid transparent;
  border-left: 100px solid transparent;
  border-right: 100px solid transparent;
  left: 0;
  bottom: -13px;
  bottom: 0px;
  z-index: 1;
  opacity: 0;
  -webkit-transition: all .2s ease;
  -moz-transition: all .2s ease;
  -ms-transition: all .2s ease;
  -o-transition: all .2s ease;
  transition: all .2s ease;
}
#cssmenu ul > li.has-sub > a::before {
  content: "";
  position: absolute;
  display: block;
  width: 0;
 ...

JavaScript

( function( $ ) {
$( document ).ready(function() {
$('#cssmenu li.has-sub>a').on('click', function(){
		$(this).removeAttr('href');
		var element = $(this).parent('li');
		if (element.hasClass('open')) {
			element.removeClass('open');
			element.find('li').removeClass('open');
			element.find('ul').slideUp();
		}
		else {
			element.addClass('open');
			element.children('ul').slideDown();
			element.siblings('li').children('ul').slideUp();
			element.siblings('li').removeClass('open');
			element.siblings('li').find('li').removeClass('open');
			element.siblings('li').find('ul').slideUp();
		}
	});
});
} )( jQuery );