javascript - 在 React + TypeScript 中将函数从容器传递到功能组件

标签 javascript reactjs typescript

我正在尝试使用 React 和 Typescript 创建一个简单的选项卡应用程序。我有一个名为 Tabs 的容器组件,它处理状态并将其传递给我的内容组件。我还创建了一个 .函数名为“handleName”,我将其传递给名为 Sidebar 的功能组件。当该函数被触发时,它应该更新我的状态,从而重新渲染我的内容组件。但是,它不起作用。我的控制台中也没有出现任何错误。它只是什么也没做。

这是我的选项卡(容器)

import * as React from 'react';
import Sidebar from './Sidebar';
import Content from './Content';
import './css/Tabs.css';

export interface State {
    message: string;
}

class Tabs extends React.Component<{}, State> {
    public state: State = {
        message: 'Select a name from the tabs menu',
    };

    componentWillMount () {
        if ('pluginLoaded' in window) {
            (window as any).pluginLoaded('hello', function (port: any, context: any) {
                // Future work should interact with the message channel here
            });
        }
    }

    handleName(value: string) {
        if (value === 'Vanessa') {
            this.setState({
                message: 'Vanessa means "butterfly"'
            });
        } else if (value === 'Paola') {
            this.setState({
                message: 'Paola means "small"'
            });
        }
    }

    render() {
        return (
            <div className="Tabs">
              <p>Tabs</p>
              <Sidebar handleName={() => this.handleName}/>
              <Content message={this.state.message}/>
            </div>
        );
    }
}

export default Tabs;

这是我的侧边栏

import * as React from 'react';

export interface Props {
    handleName: (value: String) => void;
}

const Sidebar: React.StatelessComponent<Props> = (props) => {

    // declare constants
    const Vanessa = 'Vanessa',
        Paola = 'Paola';

    return(
        <div className="Sidebar">
            <h1>Tabs</h1>
            <ul>
                <li><a onClick={() => props.handleName(Vanessa)}>Vanessa</a></li>
                <li><a onClick={() => props.handleName(Paola)}>Paola</a></li>
            </ul>
        </div>
    );
};

export default Sidebar;

这是我的内容

import * as React from 'react';

export interface Props {
    message: string;
}

const Content: React.StatelessComponent<Props> = (props) => {

    return(
        <div className="Content">
            <h1>Find the meaning</h1>
            <p>{props.message}</p>
        </div>
    );
};

export default Content;

最佳答案

改变

<Sidebar handleName={() => this.handleName}/>

<Sidebar handleName={this.handleName}/>

还使用箭头函数将handleName绑定(bind)到类范围

handleName = (value: string) => {

关于javascript - 在 React + TypeScript 中将函数从容器传递到功能组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477657/

相关文章:

javascript - JS 滚动在我的网站上似乎不起作用

javascript - 在 html5-canvas 上绘制函数图的正确方法

javascript - 从 JSON 文件到 React JS 文件的图像不显示

angular - navpush 在 ionic 2 中不起作用

javascript - 单击两次按钮即可获得正确的 console.log 输出

javascript - 使用 javascript 将 HTML 注入(inject) iPhone 网页的末尾

javascript - 如何在 React 应用程序中使用 Fetch 向 Flask API 发送 POST 请求

javascript - 如何使用 react-native 和 javascript 在应用程序的主页中添加弹出窗口?

javascript - 带有计算属性名称的 Typescript setState

javascript - 检测到但未使用的 VScode sourceMaps