在 2 个 React 组件之间传递单个值的最简单方法是什么?

IT技术 javascript reactjs
2021-05-24 08:20:02

我在组件 A 中获得了正确的数据,现在我需要将该值传递给组件 B。在第一个组件中是一个单击事件,它接收单击的项目,现在我需要将该单击的值传递给组件 B,以便做进一步的格式化。

    class ReportsData extends Component {
    constructor(props) {
    super(props) 
        this.state = {
            value: null
    }
    render() {

    const {reports, employees} = this.props;
    let sortedReports = _.sortBy(reports, function(o) { return new moment(o.date); }).reverse();

    const handleClick = (item) => {
        return item // --> 2011 --> I NEED TO TAKE THIS VALUE AND PASS IT TO ReporstDetails COMPONENT // When I do setState = ({value: item}) error ???
    }

    const listReports = sortedReports.map(item => {

        return (
        <tr key={item.rowNumber}>
            <td>  {item.year}</td>

            <td> {item.month}</td>

            <td> {item.bruto_ukupno}</td>
            <td> {item.neto_plata}</td>
            <td> {item.topli_obrok}</td>

            <td> {item.doprinosi}</td>
            <td> {parseInt(item.ukupno_plata)}</td>

            <td className="table-actions">
                <Link onClick={this.handleClick.bind(this, item.year)}
                    to={`/reports/details`}>
                    <PieChart size="21"/>
                </Link>

            </td>
        </tr>
    )});

    return (
        <div className="container">
        <div>
            <header>
            <h4>A complete list of reports</h4>
            <p>Details available by clicking on an item </p>
            </header>
            <hr />
        </div>

        <table className="table table-striped">
        <thead>
        <tr>
            <th>Year</th>
            <th>Month</th>

            <th>Bruto</th>
            <th>Neto</th>
            <th>Meal</th>

            <th>Taxes</th>
            <th>Employees</th>
            <th>Details</th>
            <th></th>
       </tr>
        </thead>
         <tbody>
            {listReports}
        </tbody>
    </table>
   </div>
    );
}
}

export default ReportsData;

当我尝试 setState 并将其作为props传递时,我变得未定义。

我是初学者,所以请原谅我并帮助我。

4个回答

最简单的方法是通过在数据statereact-router链接

<Link to={{ pathname: '/reports/details', state: { item } }}>
    <PieChart size="21"/>
</Link>

和控制台this.props.location.state.item/reports/details成分......你会得到你的数据

你可以这样传递item

<Link to={{"/reports/details", query: your state here}}>
    <PieChart size="21"/>
</Link>

然后在您的子组件中,您可以使用它:

this.props.location.query

您面临的问题是导致创建 Redux、MobX 和其他各种类似Flux的框架的原因。

在没有“父”-“子”关系的组件之间传递 prop 的解决方案是使用 Store。

存储包含应用程序状态和逻辑。它们的作用有点类似于传统 MVC 中的模型,但它们管理许多对象的状态——它们不像 ORM 模型那样代表单个数据记录。它们也不同于 Backbone 的系列。存储不仅仅是管理一组 ORM 样式的对象,还管理应用程序中特定域的应用程序状态。

您可以在应用程序中拥有多个 Store,您可以在其中对数据进行分组并在组件上导入/使用适当的 Store。

请注意,即使没有任何这些库,您仍然可以使用 Store 概念,例如:

class UIStore {
    isModalActive = true;
}

const store = new UIStore();
export default store;

然后简单地将您的商店导入到您的任何 React 组件中

import {UIStore} from 'stores';

然后访问该属性,如:

UIStore.isModalActive

或者设置它的值:

UIStore.isModalActive = false;

我的建议是使用其中一个库,因为即使对于小型项目,您迟早会需要它。如果它们的值发生变化,它们可以通知包含它们的任何组件并相应地重新渲染它们。

在 Redux 中存储示例

在 MobX 中存储示例

如果组件 A 有一些状态值如果你需要传递给它的子组件 B,那么你需要将它作为props传递。

参考这个reactjs.org