gpt4 book ai didi

javascript - 我们如何在 Reactjs 中动态删除元素

转载 作者:行者123 更新时间:2023-11-29 18:02:17 26 4
gpt4 key购买 nike

我动态创建了很多元素。我有一个状态数组,用于记录元素。当我添加更多元素时,它们会与之前的数组元素相连接。这是代码。

var App = React.createClass({
getInitialState: function() {
return {
propsList: []
};
},
addProps: function(props) {
var propsList = this.state.propsList.concat([props]);
this.setState({ propsList: propsList });
},
render: function() {
var components = this.state.propsList.map(function(props) {
return React.createElement('g', props);
});
return React.createElement('div', null, components);
}
});
ReactDOM.render(
React.createElement(App, null),
document.getElementById('svg')
);

我想删除执行点击操作的元素(g 标签)。我曾尝试使用 refs 但它没有用,因为数组存储了太多元素。

最佳答案

请注意,如果“用户操作”发生在您的 React 组件之外(即应用程序中的其他地方),您就会这样做。如果“用户操作”作为您的 React 组件中的事件发生,您只会调用一次渲染,而 App 会将节点保持为状态,并且只会调用 this.setState({ node: modifiedNodes });更改状态,这将导致 React 更新您的 DOM。

var App = React.createClass({
render: function() {
// Get the node from the passed-in props
var node = this.props.node;

// generate the child components
var components = node.map(function(props) {
return React.createElement('g', {
id: props.id,
key: props.id
},
React.createElement('path', props));
});

// render them in a div
return React.createElement('div', null, components);
}
});


// first time it will create the DOM
// after that it just modifies the DOM
function renderApp(node, element) {
ReactDOM.render(React.createElement(App, {
node: node
}), element);
}

// Call when you want to get rid of the App completely
// and cleanup memory without reloading the page
function destroyApp(element) {
ReactDOM.unmountComponentAtNode(element);
}

// Initial render
var node = Interfaces.Embroidery.node;
renderApp(node, document.getElementById('parentDrawingNode'));

function updateNodeOnSomeUserActionThatHappensOutsideOfReact(...) {
node.push(...); // or whatever modification you want

// re-render
renderApp(node, document.getElementById('parentDrawingNode'));
}

关于javascript - 我们如何在 Reactjs 中动态删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com