Mysql 执行helper函数以显示数据-React,Express

Mysql 执行helper函数以显示数据-React,Express,mysql,reactjs,express,sequelize.js,Mysql,Reactjs,Express,Sequelize.js,我有一个helper函数,它基本上是基于 在product category_id和categories表中的id上: const selectName = function(id){ sequelize.query(`SELECT c.name FROM categories as c WHERE EXISTS (SELECT 1 FROM product as p WHERE c.id = '${id}')`, { type: sequelize.QueryTypes.SELECT})

我有一个helper函数,它基本上是基于 在product category_id和categories表中的id上:

const selectName = function(id){
  sequelize.query(`SELECT c.name FROM categories as c WHERE EXISTS (SELECT 1 FROM product as p WHERE c.id = '${id}')`, { type: sequelize.QueryTypes.SELECT})
    .then(cnames => {
      console.log('cnames via id >>>>>>>', cnames)
    });
};
如果传入的id等于类别的id,则上面的代码将返回一个名称

然后在我的express文件中,我将其设置为在我的前端调用它:

app.post('/api/selectName', (req, res) => {
  helper.selectName(req.body.category_id);
  res.end();
});
在我的react中,我已经设置了一个函数,用于提取产品列表,其中包含名称、金额和类别id

class App extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      pdata: [],
    };

    this.selectName= this.selectName.bind(this);
  }

  pullProducts() {
    axios
      .get('/api/products')
      .then(myData => {
        this.setState({
          pdata: myData.data
        });
      })
      .catch(err => console.log(err));
  }


  componentDidMount() {
    this.pullProducts();
  }
我还尝试使用selectName函数调用我在上面创建的函数:

 selectName(id){
    axios
      .post('/api/selectName', {
        category_id: id
      })
      .then( () => this.pullProducts() )
      .catch(err => console.log(err));
  }
我希望此函数将根据传递的category_id返回类别的名称,并检查categories和id中的等效id,然后返回名称

因此,在我的productlist组件中,我传入了以下函数:

   <TransactionList tdata={this.state.cdata} selectName={this.selectName}/>

然后在实际组件中,我尝试调用functin进行选择:

    <div className="c-data">{this.props.item.pname}</div>
    <div className="c-data">{this.props.item.amount}</div>
   <div className="c-data">{this.selectName(this.props.item.category_id)}</div>
{this.props.item.pname}
{this.props.item.amount}
{this.selectName(this.props.item.category_id)}
但它只是返回了一个错误,上面写着:TypeError:this.selectTransactionViaCategoryId不是一个函数

我的目标是:在调用函数的div中,我希望返回传入的具有等效id的类别的名称。如果该行中没有类别id,则必须显示“无id”

我如何做到这一点?我做错了什么?如果该行中没有category_id,它必须显示“no id”,该怎么办


抱歉,这里是新手。

有几件事可以帮你做你想做的事:

  • TransactionList
    中,您应该使用
    this.props.selectName
    而不是
    这个。选择name
    (除非组件中有字段) 调用
    selectName

  • 执行此操作时:
    {this.selectName(this.props.item.category_id)}
    您希望函数返回“category”的名称,同时返回
    未定义的

  • 解决这一问题的一种方法是将父组件的状态设置为后端(
    /api/selectName
    )返回的任何值,并将其作为道具传递给
    TransactionList
    ,而不是在
    render
    函数中调用
    selectName
    (例如,内部
    componentDidMount