从反应中调用javascript方法

时间:2017-01-03 12:01:53

标签: javascript jquery reactjs

我试图在调整" React"的过程中调用javascript函数。基于"菜单"在一些以前用jquery写的旧函数

下面是我的菜单代码

 class Menus extends React.Component{
      constructor(props) {
      super(props);
      this.state = {
      visible: false,
      data: []
    };
  }

  componentDidMount(){
    var _this = this;
    this.setState({data: this.props.data});
  }

  handleClick () {
    var active = !this.state.visible;
    this.setState({ visible: active });
    console.log(this.props.data.MenuText);
  }

  menuTrigger(params){ 
    var func="testalert";//this.props.data.onclick;
    var fnparams = JSON.parse(this.props.data.Parameter);
    // find object
    var fn = eval(func);

    // is object a function?
    console.log('typeof fn === "function":',typeof fn === "function" , typeof fn,fnparams);

            fn.apply(null,fnparams); 
    console.log('Executing:',this.props.data.onclick);
  }
  render(){
    var childNodes;
    var classObj;
    var url;
    childNodes = null;

    if (this.props.data.Children.length) {
      childNodes = this.props.data.Children.map(function(node, index) {
        return  <Menus data={node} />
      });
      classObj = {
        togglable: true,
        "togglable-down": this.state.visible,
        "togglable-up": !this.state.visible
      };
    }

    var style;
    if (!this.state.visible) {
      style = {display: "none"};
    }
    if (childNodes != null){
      return (
        <li>
          <a href="#" onClick={this.handleClick.bind(this)} className="menu {classNames(classObj)}">
            <i className="fa fa-road"></i>
            {this.props.data.MenuText}
          </a>
          <ul style={style} className="treeview-menu">{childNodes}</ul>
        </li>
      );
    }else{
        return (
          <li>
            <a href="#" className="menu" onClick={() => this.menuTrigger(this.props.data.Parameter)}>
                <i className="fa fa-files-o"></i>
               {this.props.data.MenuText}
           </a>
          </li>
        );
    }
  }
}

javascript函数名称以字符串格式存储在json对象中

var example={ 
"MenuText": "example", 
"Parameter": "{'name':'joe'}",
"onclick": "sayhello"
};

以前的代码就是这样实现的

function sayhello(parameter){
   alert('hi '+parameter.name);
}

我一直试图执行此操作,但在&#34;参数&#34;上获得未定义。

我怀疑这里没什么问题。

  1. 为什么params是空的?字符串接受它作为&#34;功能&#34;

    fn.apply(NULL,fnparams);

  2. 这是一种正确的反应方式吗?

1 个答案:

答案 0 :(得分:1)

为什么不使用:

   var func="testalert";//this.props.data.onclick;
    var fnparams = JSON.parse(this.props.data.Parameter);
    // find object
    eval(func+'('+fnparams+')');