Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将数据回发到api,而不强制渲染组件执行所有操作_Reactjs - Fatal编程技术网

Reactjs 将数据回发到api,而不强制渲染组件执行所有操作

Reactjs 将数据回发到api,而不强制渲染组件执行所有操作,reactjs,Reactjs,我有一个react组件,用于上下投票,我正试图使用它来发回数据。例如,“向上投票”按钮、“向下投票”按钮将内部状态更改为“记录向上投票”或“向下投票” 现在是将数据更改发布回api的时候了。该组件基本上是一个渲染组件: <Feedbackify up={44} down={23} /> 所以你给它提供投票的当前状态,它只是呈现它们,当你投票向上或向下时,它会修改它自己的内部状态。 我可以在组件内部发布或放入api,但我不希望这样。通过某种方式从外部发布到组件的最惯用方法是什么

我有一个react组件,用于上下投票,我正试图使用它来发回数据。例如,“向上投票”按钮、“向下投票”按钮将内部状态更改为“记录向上投票”或“向下投票”

现在是将数据更改发布回api的时候了。该组件基本上是一个渲染组件:

<Feedbackify up={44} down={23} />

所以你给它提供投票的当前状态,它只是呈现它们,当你投票向上或向下时,它会修改它自己的内部状态。 我可以在组件内部发布或放入api,但我不希望这样。通过某种方式从外部发布到组件的最惯用方法是什么

<Feedbackify up={44} down={23} onChange={someOnChange}/>


或者react中是否有更清洁的替代方法?

通常的方法是。因此父组件具有向上和向下投票的状态,只传递给
Feedbackify
投票值和
someOnChange
(就像您所做的那样)。在每次投票更改时(在
someOnChange
调用中),父级的状态都会更改,更新后的投票作为道具传递给
Feedbackify
。此外,家长还负责向api发送数据

范例

class Parent extends React.Component {
    constructor (p) {
        super (p);
        this.state = {
            up: 0,
            down: 0
        }
    }

    someOnChange (event) {
        let { up, down } = this.state;
        // Assuming value will be positive for upvote and negative for downvote
        if (event.target.value > 0)
            up += event.target.value;
        else
            down += event.target.value;

        doAsyncPost (up, down); // Post to server API
        this.setState ({ up, down });
    }

    render () {
        return <Feedbackify up={this.state.up} down={this.state.down} onChange={this.someOnChange.bind(this)}/>
    }
}
类父级扩展React.Component{
建造师(p){
超级(p);
此.state={
上升:0,,
下跌:0
}
}
someOnChange(事件){
let{up,down}=这个状态;
//假设向上投票的值为正,向下投票的值为负
如果(event.target.value>0)
up+=事件.target.value;
其他的
down+=event.target.value;
doAsyncPost(向上、向下);//发布到服务器API
this.setState({up,down});
}
渲染(){
返回
}
}
对于所有部件

,您可以考虑集中管理状态。