На самом деле, что-то не так во всех остальных ответах в режиме r+
.
test.in
содержимое файла:
hello1
ok2
byebye3
И сценарий py:
with open("test.in", 'r+')as f:
f.readline()
f.write("addition")
Выполните его, и содержимое test.in
будет изменено на:
hello1
ok2
byebye3
addition
Однако, когда мы модифицируем скрипт на:
with open("test.in", 'r+')as f:
f.write("addition")
test.in
также реагируют:
additionk2
byebye3
Таким образом, режим r+
позволит нам покрывать контент с самого начала, если мы не выполнили операцию чтения. И если мы выполним некоторую операцию чтения, f.write()
просто добавит файл.
Кстати, если мы f.seek(0,0)
до f.write(write_content)
, write_content будет покрывать их из positon (0, 0).
Я предполагаю, что код, который вы показываете, находится внутри метода render()
некоторого компонента React, так что у вас действительно есть состояние.
Обратите внимание, что атрибут component
в теге Route
ожидает значение, которое является функцией без аргументов. Компонент для визуализации является результатом функции . Но ничто не запрещает вам сделать какую-то работу до возврата значения. Я бы попробовал что-то вроде этого
<Route path={'/page1'} component={() => {
this.setState({headerTitle: ...what you want..., boldTitle: ...what you want...})
return <Page1 />
}}/>
. Если Page1
- это просто функция, измените строку «return» с помощью return Page1()
.
вы можете использовать библиотеку редуксов как глобальное состояние
что-то вроде этого
class Main extends Component{
render(){
return (
<main className={theme.main}>
<Header
title={this.props.headerTitle}
boldTitle={this.state.boldTitle}
/>
<div className={theme.content}>
<Switch>
<Route path={'/page1'} component={Page1}/>
<Route path={'/page2'}component={Page2}
/>
</Switch>
</div>
<Footer/>
</main>
)
}
const mapStateToProps = state =>{
return { headerTitle: state.headerTitle }
}
export default connect(mapStateToProps)(Main)
Page1
class Page1 extends Component{
changeTitle =()=>{
this.props.actions.changeTitle("title from Page1")
}
render(){
return (
<div>
<button onClick={this.changeTitle}>changeTitle</button>
</div>
)
}
const mapDispatchToProps = (dispatch)=> {
return {
actions: bindActionCreators({ changeTitle }, dispatch)
}
}
export default connect(null, mapDispatchToProps)(Page1)
код это не функционально, но это идея как вы можете использовать для этого редукс
ПЕРЕМЕСТИТЕ ВАШУ ГОЛОВУ ВНУТРИ Page1 И Page2.
<Route path={'/page2'} component={() => <Page2 currentTitle={this.state.headerTitle}
/>} />
Затем в заголовке используйте currentTitle, чтобы изменить заголовок.
Поместите заголовок в его собственный компонент и импортируйте его отдельно в каждый компонент страницы.
Затем вы можете передавать реквизиты в заголовок, например, когда вы вызываете Заголовок на каждой странице ...
import Header from (wherever that component is)
class Page# extends React.component {
other code
render() {
return (
<div>
<Header currentTitle="this.state.headerTitle" />
<rest of code for this page />
</div>
}
или все, что вам нужно.