【问题标题】:Update state when data changed in React+ReduxReact+Redux 中数据更改时更新状态
【发布时间】:2017-04-06 12:25:51
【问题描述】:

我太新了,无法做出反应。我对一些事情感到好奇。我想的第一个话题,为什么js里有html标签?

我需要做一个项目。我有一个用.NET返回json的方法 我有如下代码。添加内容时如何更新 div?

这个 .net 代码。

private static readonly IList<Mock.Model.Skills> _Skills;


[Route("api/Skills/add")]
[HttpPost]
public ActionResult Skills(Mock.Model.Skills Model)
{
   if (ModelState.IsValid)
   {
    _Skills.Add(Model);
     return Json("true");
   }
   return Json(false);
}

还有,js(反应)代码。

var Rows = React.createClass({
    render: function () {
        return (
            <span className="label label-info tags">{this.props.item.tag}</span>
        );
    }
});

var SkillsRow = React.createClass({
    getInitialState: function () {
        return {
            items: []
        }
    },
    componentDidMount: function () {

        $.get(this.props.dataUrl, function (data) {
            if (this.isMounted()) {
                this.setState({
                    items: data
                });
            }
        }.bind(this));
    },
    render: function () {
        var rows = [];
        this.state.items.forEach(function (item, index) {
            rows.push(<Rows class="label label-info tags" key={index} item={item} />);
        });
        return (<span>{rows}</span>);
    }
});
ReactDOM.render(
    <SkillsRow dataUrl="/api/Skills" />,
    document.getElementById('skills-data')
);

这很好用,但不要添加。 我想知道这是否是正确的方法?

感谢所有感兴趣的人。

【问题讨论】:

  • 虽然我认为任何答案都将主要基于意见,但您使用的模式对于 React 来说很好。它不是 Redux,因为您没有使用 a store

标签: javascript .net reactjs asp.net-core-mvc react-redux


【解决方案1】:

如果你想向 api 添加项目,你可以这样调用:

var SkillsRow = React.createClass({
  getInitialState: function() {
    return {
      items: [],
      currentEditor: ''
    }
  },
  componentDidMount: function() {
    this.updateSkillList()
  },
  updateSkillList: function() {
    $.get(this.props.dataUrl, function(data) {
      this.setState({
        items: data
      })
    }).bind(this)
  },
  handleEditorChange: function(event) {
    this.setState({
      currentEditor: event.target.value
    })
  },
  handlePostForm: function() {
    $.post('api/Skills/add', {skill: this.state.currentEditor}, function(data) {
      this.updateSkillList()
    })
  },
  renderSkillList: function() {
    this.state.items.map(function(item, idx) {
      return <Row className="label label-info tags" key={idx} item={item} />
    })
  },
  render: function() {
    return (
      <div>
        <span>
          <input value={this.state.currentEditor} onChange={this.handleEditorChange} />
          <button onClick={this.handlePostForm} />
        </span>
        <span>{this.renderSkillList()}</span>
      </div>
    ) 
  }
}) 

编辑: 现在我明白了这个问题,您的代码看起来像这样,您还必须修复后端代码以仅接收技能名称,然后创建对象(您不能在 javascript 中创建 C# 对象)

【讨论】:

  • 调试时出错。 Line => updateSkillList Unexpected token (15:20)
  • 看起来你没有使用 ES6,编辑了上面的代码
  • 谢谢,但每隔一段时间去服务器是不正确的。我需要访问 HTML 来更新功能。喜欢
  • 上面的代码已经过编辑,查看更改并查看页脚中的观察结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 2021-08-11
  • 2019-12-29
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2016-11-26
相关资源
最近更新 更多