访问从一个组件到另一个组件的数据

dev*_*nya 5 javascript mysql reactjs

嗨,我开始学习reactjs.因此,在了解了基础知识后,我开始使用reactjs来处理数据库连接.在代码中我试图获取userId和Password来建立数据库连接并尝试列出数据库中可用的表.在Login.js中,我在单击登录按钮时创建了一个表单(userId和Password)我将建立连接并执行Show Table查询以列出数据库中的所有表,然后移动到Table.js我尝试列出可用表的页面表.现在我能够连接到数据库但不能显示表中的表Table.js,所以如何在Table.js文件中显示表列表,因为我已将我的数据库连接和查询放在Login中的按钮事件中. JS.还有可能声明一个变量全局并跨另一个js文件访问它.任何帮助都会很棒,谢谢.

Login.js

import React from 'react';
import TableContent from './tables';
class Login extends React.Component{
    constructor(){
        super();
        this.state={
            showComponent : false,
        };
        // this.buttonClick = this.buttonClick.bind(this);
    }

    buttonClick(event){
        event.preventDefault();
        this.setState({
            showComponent: true,
        })

        var db = require('@dataBase/dynamoConnect')({
            "UserId": "XXXXXXXXXXXXXXXXXXXXXXXX",
            "Password": "YYYYYYYYYYYYYYY",
            "region": "ZZZZZZZZZZ"
        });
        db.query("SHOW TABLES",(err,data)=>{
        const tableList = data;
        console.log(tableList);
        })
    }
    render(){
        return(
            <div>
                <form>
                    <label>User Id :</label>
                    <input type="text" className="test"/>
                    <br/>
                    <label>Password :</label>
                    <input type="text" className="test" />
                    <button onClick={this.buttonClick.bind(this)} className="connect" > Login</button>
                  </form>
                 {this.state.showComponent && <TableContent />}
            </div>  
        )
    }
}

export default Login;
Run Code Online (Sandbox Code Playgroud)

Table.js

import React from 'react';

class TableContent extends React.Component {
    constructor() {
        super();
        this.state = {
            showComponent: false,
        };
        this.buttonClick = this.buttonClick.bind(this);
    }

    buttonClick(event) {
        event.preventDefault();
        this.setState({
            showComponent: true,
        })
    }

    render() {
        return (
            <div>
                <form>
                 <div id="first">   
                <label> Table </label>
                <br />
                //Display the tables from DB here
                <select name="sometext" multiple="multiple" >
                    <option>Table1</option>
                    <option>Table2</option>
                    <option>Table3</option>
                    <option>Table4</option>
                    <option>Table5</option>
                </select>
                </div>
                <div id="second"> 
                <label> SQL </label>
                <br/>
                <textarea rows="4" cols="50">SQL </textarea>
                </div>
                <button onClick={this.buttonClick.bind(this)} > Execute </button> 
                <div id="third" >
                {this.state.showComponent && <SampleTable />}
                </div>
                </form>
            </div>
        )
    }
}

export default TableContent;
Run Code Online (Sandbox Code Playgroud)

小智 1

第一的。

组件Table.js需要知道要显示的数据。
1 - 您必须通过调用查询回调将查询结果保存在组件状态中this.setState({tableData: tableList})

db.query("SHOW TABLES",(err,data)=>{
  const tableList = data;
  this.setState({
    tableData: tableList,
  });
})  
Run Code Online (Sandbox Code Playgroud)

2 - 您需要将保存的结果作为属性传递给TableContent,如下所示:

Login.js
{this.state.showComponent && <TableContent data={this.state.tableData} />};

3 - 在子组件中渲染数据。您可以通过 访问它this.props.data。您可以迭代结果数组并在单个循环中渲染所有表行。看看这个反应文档

第二:

另外是否可以声明一个全局变量并通过另一个js文件访问它

简而言之 - 是的。您可以从模块中导出函数、变量、类。

小例子:

// scriptA.js;
export const a = 42;

// scriptB.js;
import { a } from 'path/to/scriptA.js';
console.log(a) // will print 42;
Run Code Online (Sandbox Code Playgroud)

此示例假设您正在使用 es6 导入/导出功能。你require也可以。